水曜どうでしょうの DVD がごっそり手に入りそう。うれしい。
restart.txt
capistrano によるデプロイ後、passenger 上のアプリケーションを再起動するには $RAILS_ROOT/tmp/restart.txt という空ファイルを作ればいいらしい。
passenger のマニュアル にあるレシピを deploy.rb に追記。
namespace :deploy do task :start, :roles => :app do run "touch #{current_release}/tmp/restart.txt" end task :stop, :roles => :app do # Do nothing. end desc "Restart Application" task :restart, :roles => :app do run "touch #{current_release}/tmp/restart.txt" end end
で、cap deploy を実行。
% cap deploy (snip) * executing `deploy:restart' * executing "ls -xt /var/rails/sample/releases" servers: ["appserver"] [appserver] executing command command finished * executing "touch /var/rails/sample/releases/20090520140043/tmp/restart.txt" servers: ["appserver"] [appserver] executing command command finished
restart.txt を作ってくれたっぽい。実際に確認してみると
$ ls -la /var/rails/sample/releases/20090520140043/tmp total 8 drwxr-xr-x 2 cap cap 4096 2009-05-20 23:00 ./ drwxrwxr-x 11 cap cap 4096 2009-05-20 23:00 ../ lrwxrwxrwx 1 cap cap 29 2009-05-20 23:00 pids -> /var/rails/sample/shared/pids/ -rw-r--r-- 1 cap cap 0 2009-05-20 23:00 restart.txt
確かに restart.txt が作成されており、アプリケーションサーバが再起動して最新のモジュールにアクセス可能になっている事も確認できた。
この restart.txt はアプリケーションサーバ再起動後も削除されずに残っているが、作成時のタイムスタンプを見て再起動するか否かを判定しているので、残っていても構わないらしい。構わないのかもしれないけど、ウザいので削除して欲しい気もする。
deploy.rb
結局こんな風になった。まだまだ奥は深そうだが、取りあえず今は充分。
set :application, "sample" set :deploy_to, "/var/rails/#{application}" set :user, "cap" set :use_sudo, false set :default_run_options, :pty => true set :repository, "gitserver:/var/git/sample.git" set :scm, :git role :app, "appserver" role :web, "appserver" role :db, "appserver", :primary => true task :update_config, :roles => [:app] do run "chmod 775 #{release_path}/script/spin" end after "deploy:update_code", :update_config namespace :deploy do task :start, :roles => :app do run "touch #{current_release}/tmp/restart.txt" end task :stop, :roles => :app do # Do nothing. end desc "Restart Application" task :restart, :roles => :app do run "touch #{current_release}/tmp/restart.txt" end end