色々サボっていた分のキャッチアップをしたので忘備録
インストール順に 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 ]
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 に設定すること。
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 [URL]
セコメントをする