Я рекомендую вам использовать последнюю версию BackgrounDRb для этого. Вы можете прочитать о BackgrounDRb здесь: http://backgroundrb.rubyforge.org/
Чтобы поставить сообщение в очередь для последующей доставки, клиентский код BackgrounDRb (возможно, в обратном вызове after_create вашей модели приложения) может выглядеть примерно так:
MiddleMan(:email_worker).enq_send_email_task(:message => @message,
:job_key => "notify1",
:scheduled_at => Time.now + 48.hours)
Вам потребуется создать работника BackgrounDRb для обработки отправки электронной почты:
# RAILS_ROOT/lib/workers/email_worker.rb
class EmailWorker < BackgrounDRb::MetaWorker
set_worker_name :email_worker
def send_email_task(message)
# ... Code to send the email message
end
end
Обратите внимание, что для использования BackgrounDRb таким способом вы должны использовать постоянные очереди заданий, поэтому убедитесь, что вы запустили миграцию, включенную в BackgrounDRb, чтобы настроить таблицу персистентности в вашем приложении.
BackgrounDRb запускается отдельно от Rails (mongrel, apache и т. Д.) С использованием 'script / backgroundrb start', поэтому убедитесь, что вы добавляете демон в любой мониторинг процессов, который вы используете (god, monit и т. Д.) Или что вы создайте для него скрипт /etc/init.d