Roll your own dispatch reaper script

By | | Ruby on Rails Tutorials & Articles

1

If you haven’t used it before, the reaper script is useful for restarting your Rails application’s FastCGI dispatchers.

It’s seems the reaper script in Edge rails now relies on the existance of PID files in the tmp/pids directory. If you want to replicate the old functionality, create your own ruby script and override the capistrano restart task to call your own script instead of the standard script/reaper.

The reaper script for one of my apps is simply:


#!/usr/bin/env ruby
for process in `ps axwwl`.grep(/dispatch\.fcgi/).collect { |s| s.split[1] }
  puts "Sending USR2 to dispatch.fcgi process #{process}"
  Process.kill("USR2", process.to_i)
end

The above code is in script/my_reaper and is called from the Capistrano deployment recipe as below:


task :restart, :roles => :app do
 run "ruby #{deploy_to}/current/script/process/my_reaper"
end

Written By:

Tim Lucas

Tim (aka toolmantim) is a Sydney based, possum-eyed web application designer with a bent for web standards and user-centred design. When not hiding behind his camera he can be found doodling interface designs and coding Rails at his company aviditybytes.

 

{ 1 comment }

Mike February 23, 2007 at 12:37 pm

wow! this tip really helped me, I couldn’t figure out why the default reaper script was so fixed on looking for the path and PID and not finding my dispatch.fcgi! this saved me a lot of time!

Comments on this entry are closed.