やあ良い子の諸君。今日も元気にしてるかな? ギンペイです。僕は暑くて元気がありません。

ちょろっとウェブアプリを作りたくて、Ruby on Railsに手を出してみようかなと思ってやってみたのですが、これがなかなかどうして、うまくいきませんでした。aptitude install railsするとシェル版のrailsがインストールされるというのはよくわからない……。

ともあれ、試行錯誤の結果うまく動くようになったみたいなので、まとめておきます。

前提

環境は最小構成でインストールした直後のDebian (lenny)です。

# cat /etc/debian_version
5.0.8

せっかくなので最新のものをインストールしましょう。ソースコードを各サイトから持ってきます。(後の手順でwgetします。)

  • Ruby … 「最新の安定版」の”tar.gz”版
  • RubyGems … 一番上の”rubygems-*.*.*.tgz”
  • node.js … “node-v*.*.*.tar.gz Source Code”

node.jsは一見関係なさそうですが、内部で使ってるみたいなので、必須です。(正確にはJS実行環境が必須、です。)

インストール

入力だけ羅列すると、こんなんなりました。rootで作業します。

aptitude -y install g++ make zlib1g-dev libssl-dev libsqlite3-dev apache2-mpm-prefork apache2-prefork-dev libapr1-dev libaprutil1-dev libcurl4-openssl-dev

wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.2-p290.tar.gz
wget http://rubyforge.org/frs/download.php/75309/rubygems-1.8.10.tgz
wget http://nodejs.org/dist/node-v0.4.11.tar.gz

# Ruby
tar zxf ruby-1.9.2-p290.tar.gz
cd ruby-1.9.2-p290
./configure --prefix=/usr/local/ruby
make
make install
cd ..
ln /usr/local/ruby/bin/ruby /usr/bin/ruby

ruby -v

# Ruby Gems
tar zxf rubygems-1.8.10.tgz
cd rubygems-1.8.10
ruby setup.rb
cd ..
ln /usr/local/ruby/bin/gem /usr/bin/gem

gem -v

# Rake
gem install rake
ln /usr/local/ruby/bin/rake /usr/bin/rake

rake -V

# Rails
gem install rails --include-dependencies
ln /usr/local/ruby/bin/rails /usr/bin/rails

rails -v

# node.js
tar zxf node-v0.4.11.tar.gz
cd node-v0.4.11
./configure --prefix=/usr/local/nodejs
make
make install
cd ..
ln /usr/local/nodejs/bin/node /usr/bin/node

node -v

# Passenger
gem install passenger --include-dependencies
/usr/local/ruby/bin/passenger-install-apache2-module
cd /etc/apache2/
echo LoadModule passenger_module /usr/local/ruby/lib/ruby/gems/1.9.1/gems/passenger-3.0.9/ext/apache2/mod_passenger.so >> httpd.conf
echo PassengerDefaultUser www-data >> httpd.conf
echo PassengerRoot /usr/local/ruby/lib/ruby/gems/1.9.1/gems/passenger-3.0.9 >> httpd.conf
echo PassengerRuby /usr/local/ruby/bin/ruby >> httpd.conf

インストールはこれでおしまいです。Apacheの再起動が必要なんだけど、後回しにします。

wgetでソースコードをダウンロードするURLは、バージョンに合わせて適当に調整してください。(上記は2011/09/10現在で最新のものです。)

lnしてるのはパス追加が面倒だったので。もちろんパス追加でも問題ありません。

railsを入れた際にrakeも入るのですが、バージョンがずれてるみたいなので、別途インストールします。

動かしてみる

cd
rails new hoge
cd hoge
rails g scaffold note body:text
rake db:migrate
rails s

ブラウザからhttp://192.168.1.1:3000/notesにアクセスしてみて、画面が表示されたら成功です。(IPアドレスは適宜置き換えてください。)

うーん、遅いな……。

試し終わったら、Ctrl+CでWEBrickを止めます。

Apacheで動かしてみる

mod_railsことPassengerを使って動かしましょう。その方が相当速いです。設定はRailsアプリごとに作る必要があります。(なおインストールと共通設定はさっきの一連の作業に含まれています。)

cd
chown -R www-data:www-data hoge

cd /etc/apache2/sites-available/
vi hoge

hogeはRailsで作成したものと同じにすると分かりやすいと思います。このファイルに以下を書き込んで、保存します。

Listen 3000
<VirtualHost *:3000>
  ServerName hoge.example.com
  DocumentRoot /root/hoge/public
  RailsEnv development
  <Directory /root/hoge/public>
    AllowOverride all
    Options -MultiViews
  </Directory>
</VirtualHost>

有効にするには、専用のディレクトリにリンクを設置します。(なんかそういう礼儀?)

cd ../sites-enabled/
ln ../sites-available/hoge

/etc/init.d/apache2 restart

Apacheを再起動(最終行)したら、もう一度ブラウザーで開いてみてください。最初の一回だけ時間がかかりますが、それ以降は十分な速度で動かせると思います。

違う場所でアプリケーションを作成している場合は、適宜読み替えてください。名前もhogeじゃなくてね。

リリース時の設定

これは開発用の設定になっています。(Railsも開発用のDBを見ています。) 実際にリリースするときは、リリースモードでRailsを動かすようにする必要があります。

リリースモードで動かすには、まずリリース用のDBを作成します。

rake db:migrate RAILS_ENV=production

それからApacheの設定を変更します。

cd /etc/apache2/sites-available/
vi hoge

さっき作成したファイルです。この中からRailsEnv developmentの行を削除してください。指定しない場合はリリースモードになります。

あとはApacheを再起動させればOK。

/etc/init.d/apache2 restart

参考サイト