Deploying Rails3 app with passenger on CentOS 5.6

Rails app を本番環境で動かすには今は passenger が自然な選択肢らしく導入してみた。例によって先頭に # がある command を root で、 > がある command をそれ以外の user で打つ。

まず Apache の install から。

  1. # yum install httpd
  2. # chkconfig httpd on

次、 passenger の install 。

  1. # yum install httpd-devel curl-devel
    • make に必要な package の install 。うちの場合これで足りたけど make の段階で package が足りない場合は必要なものを教えてくれるのでそのときに install するほうがいいかも。
  2. # gem install passenger
  3. # passenger-install-apache2-module

終わると最後に httpd.conf に設定を追加しろと言ってくるのでそのとおりにする。うちの場合以下の 3 行だった。

LoadModule passenger_module /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.7/ext/apache2/mod_passenger.so
PassengerRoot /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.7
PassengerRuby /usr/local/bin/ruby

設定の最後。 Apache の document root を Rails app にする。あー app を "/var/www/rails/appname/" に deploy する場合ね。

<VirtualHost *:80>
    ServerName www.example.com
    DocumentRoot /var/www/rails/appname/public
    <Directory /var/www/rails/appname/public>
        AllowOverride all
        Options -MultiViews
    </Directory>
</VirtualHost>

Apacheapache という user で Rails app に access する。ので起動できるようにするために何とかしてやらないといけないんだけどそのための group を追加する方向で解決する。安直に "rails" て名前にして Rails app 全般をこの group で起動するようにしてみる。

  1. # groupadd rails
  2. # usermod -G rails apache

次、 app を deploy する場所を作る。

  1. # cd /var/www/
  2. # mkdir rails

実際の app を deploy する。

  1. # cd appname
  2. # git checkout-index -a -f --prefix=/var/www/rails/appname/
    • よく言われるけど prefix の最後の "/" は必須というかないと残念なことになるので注意。
  3. # cd /var/www/rails/
  4. # mkdir appname/log
  5. # touch production.log
    • log file はないとダメだろー。
  6. # mkdir appname/tmp
    • tmp がないと動かない場合もあるらしいのでつくっとく。
  7. # chown -R user:rails appname
    • apacheaccess できるように group を rails にする。あと細かい調整ができるように所有権を一般の user にしてるけどここで調整するよりは開発環境で変更してから deploy しなおすのが筋がいい。 root でいじって大損害を回避するための設定ってことにしといたほうがいいかな。

最後、 database を初期化する。

  1. > rake db:migrate RAILS_ENV=production
  2. > rake db:setup RAILS_ENV=production
    • seed data 投入。必要な場合のみ。

これで終了。満を持して Apache を起動する。

  1. # /etc/init.d/httpd start