> sudo gem install daemons > script/plugin install git://github.com/dougal/daemon_generator.git -c > script/generate daemon mailer -c > RAILS_ENV=development lib/daemons/mailer_ctl start
mit dem File lib/daemons/mailer.rb:
#!/usr/bin/env ruby
# You might want to change this
ENV["RAILS_ENV"] ||= "development"
require File.dirname(__FILE__) + "/../../config/environment"
$running = true
Signal.trap("TERM") do
$running = false
end
while($running) do
mailing = Mailing.next_for_delivery
if mailing
mailing.deliver
else
sleep 15
end
end
# mailings_controller.rb
def deliver
Mailing.update(params[:id], :scheduled_at => Time.now)
flash[:notice] = "Delivering mailing"
redirect_to mailings_url
end
# models/mailing.rb
def self.next_for_delivery
Mailing.first(:conditions => ["delivered_at IS NULL AND scheduled_at <= ?", Time.now.utc], :order => "scheduled_at")
end
def deliver
update_attribute(:scheduled_at, nil)
sleep 10 # placeholder for sending email
update_attribute(:delivered_at, Time.now)
end