トップ «前の日記(2011/02/20 (日) ) 最新 次の日記(2011/02/22 (火) )» 編集 RSS feed

HsbtDiary


2011/02/21 (月) [長年日記]

[delayed_job][bluepill][ruby][rails]delayed_job で複数の woker を bluepill で監視

delayed_job で複数の woker を起動したい場合は

ruby script/delayed_job -n 2 start

とかそんな感じでやるのが定石みたいなんだけど、これを bluepill で監視しようとする場合は下のような pill ファイルを用意して load する必要がある。

RAILS_ROOT = File.expand_path('..', File.dirname(__FILE__))
RAILS_ENV = ENV['RAILS_ENV'] || 'production'
workers = 4

Bluepill.application("delayed_app") do |app|
  workers.times do |i|
    app.process("delayed_job.#{i}") do |p|
      p.working_dir = RAILS_ROOT
      p.environment = { "RAILS_ENV" => RAILS_ENV }
      p.start_command = "./script/delayed_job start -i #{i}"
      p.restart_command = "./script/delayed_job restart -i #{i}"
      p.stop_command = "./script/delayed_job stop -i #{i}"

      p.start_grace_time = 30.seconds
      p.stop_grace_time = 30.seconds
      p.restart_grace_time = 60.seconds

      p.pid_file = "#{RAILS_ROOT}/tmp/pids/delayed_job.#{i}.pid"
    end
  end
end

具体的には -n オプションで複数の worker を立ち上げるのではなくて bluepill 側で複数の worker を管理しつつ立ち上げるようにしている。これでどのプロセスが死んだとしても bluepill が生き返らせてくれる(はず)

これは resque とかでも同じなので、似たようなことをやろうとしている人は気をつけた方がいいかもね。