Angels & Daemons

"Supporting your rails application with custom daemons"

Session Description

Sample Project

http://thoughtbot.com/projects/ldap-ar-gateway

Daemonizing

def daemonize
  Kernel.fork and Kernel.exit
  Process.setsid
  Kernel.fork and Kernel.exit
  File.umask 0
  Dir.chdir '/'
  ObjectSpace.each_object(IO) {|io| io.close rescue nil}
  STDIN.open '/dev/null'
  STDOUT.open '/dev/nul', a
end

-- or --

require 'daemons'
Daemonis.daemonize
  loop {
  ---
}

Interacting with Rails

require 'environment.rb'

if not defined? RAILS_ROOT
  raise 'Error'
end

ActiveRecord:;Base.allow_concurrency = true #Otherwise get MySQL lost connection error

Alternatives

  • Rakes tasks
  • ./script/runner

These are easy and good for single-shot or periodic tasks but overlapping execution can be a problem.

  • BackgroundDRB

Is good, early versions are buggy