Passenger とか RVM とか2010/03/10

色々サボっていた分のキャッチアップをしたので忘備録

インストール順に RVMから

RVM

RVM は、複数バージョンのruby処理系を同時にインストールして、 それらをスイッチしながら利用することを可能にしてくれるライブラリ。

gemで配布されているけど、実体は殆どシェルスクリプト。

ちょっと考えれば何をやっているのかはすぐに判ると思う。でも、これらのスクリプトが既製品で用意されたというのは大きい。

複数のバージョンの ruby に順番に同じコマンドを流して、結果を比較できる機能は結構楽しい。

$ rvm ruby -v
jruby-1.4.0: jruby 1.4.0 (ruby 1.8.7 patchlevel 174) (2009-11-02 69fbfa3) (OpenJDK Client VM 1.6.0) [i386-java]
jruby 1.4.0 (ruby 1.8.7 patchlevel 174) (2009-11-02 69fbfa3) (OpenJDK Client VM 1.6.0) [i386-java]

ruby-1.8.6-p399: ruby 1.8.6 (2010-02-05 patchlevel 399) [i686-linux]
ruby 1.8.6 (2010-02-05 patchlevel 399) [i686-linux]

ruby-1.8.7-p249: ruby 1.8.7 (2010-01-10 patchlevel 249) [i686-linux]
ruby 1.8.7 (2010-01-10 patchlevel 249) [i686-linux]

ruby-1.9.1-p378: ruby 1.9.1p378 (2010-01-10 revision 26273) [i686-linux]
ruby 1.9.1p378 (2010-01-10 revision 26273) [i686-linux]

あと、0.18 ぐらいでいくつかのオプションの記法が変更されている。 例えば、インストールされたruby処理系の一覧の取得には 'rubies' の引数が必要になった。

$ rvm list rubies
rvm Rubies
   jruby-1.4.0 [ [i386-java] ]
   ruby-1.8.6-p399 [ i386 ]
=> ruby-1.8.7-p249 [ i386 ]
   ruby-1.9.1-p378 [ i386 ]

Default Ruby (for new shells)
   ruby-1.8.7-p249 [ i386 ]

System Ruby
  system [ i386 ]

Passenger

Phusion Passnger は通称mod_rails(ドメイン名もそうだ)。 Apacheの拡張モジュールとして動作し、rubyのプロセスをキャッシュしてくれる素敵なやつ。

噂には聞いていたけど、実際動作させてみるとお手軽さが凄い。 確かに mogrelのプロセスを自前でspinさせていた時代には戻れない気がする。

RVM経由でビルドした場合(かつ RVMサイトのインテグレーションガイドに従った場合) 共有モジュールの.soが、

/home/user/.rvm/gems/ruby-1.8.7-p249/gems/passenger-2.2.10/ext/apache2/mod_passenger.so

とか言う結構素敵な場所にできます。 素のrubyからインストールしても、/lib/ruby/gems/1.8/gems/~ とかApacheのモジュールとしては結構ナニな場所だけどね。

このせいで、うちの環境だと、SELinux のチェックにひっかかってしまった。

Apache の起動時に mod_passenger.so を読み込もうとしたところで Permision Denied のエラーで落ちる。

この場合、SELinux を Enfoced か Disabled に設定すること。

Capistorano

deploy時にシンボリックリンクを張り代えるので、Passenger との相性が気になったけど、 今のところは問題なさそう。

Passenger は シンボリックリンクが張り代わった直後のアクセスで($RAILS_ROOT/tmp/restart.txt が無くても) 再読み込みされているっぽい。

念のため Capfile で deploy:restart タスクに restart.txt に touch するようにしておく。 (もはや、script/process/reaper なんて存在しないしね)

namespace :deploy do
  desc "Restarting mod_rails with restart.txt"
  task :restart, :roles => :app, :except => { :no_release => true } do
    run "touch #{current_path}/tmp/restart.txt"
  end

  [:start, :stop].each do |t|
    desc "#{t} task is a no-op with mod_rails"
    task t, :roles => :app do ; end
  end
end
http://tomcopeland.blogs.com/juniordeveloper/2008/05/mod_rails-and-c.html

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://dragonstar.asablo.jp/blog/2010/03/10/4936324/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。