【发布时间】:2012-11-12 01:42:40
【问题描述】:
我的应用程序使用Collective Idea fork of Delayed Job 异步发送电子邮件。问题是这在开发环境中可以正常工作,但在生产环境中却不行。这些工作没有失败(我检查了delayed_jobs 表),它们只是没有被消耗。生产日志中没有任何值得注意的内容。
这是delayed_jobs 表中handler 列的内容:
--- !ruby/struct:Delayed::PerformableMethod \
object: CLASS:FeedbackMailer\
method: :deliver_message\
args: \
- AR:Message:6\
——我看不出有什么问题。这是我的FeedbackMailer 班级:
class FeedbackMailer < ActionMailer::Base
def message(message, sent_at = Time.now)
subject = 'New Feedback Message'
subject = "#{subject}: #{message.subject}" if message.subject.present?
subject subject
recipients 'me@example.org'
from 'feedback@example.org'
sent_on sent_at
body :message => message
end
end
最后,这是我Message类中的相关方法:
def send_email
FeedbackMailer.send_later(:deliver_message, self)
end
我知道 ActionMailer 代码在生产中可以正常工作,因为我在切换到延迟作业之前对其进行了同步测试。正如我所说,我也通过在开发中成功使用延迟作业一直运行它。
如果我在服务器上运行top 命令,那么我可以看到延迟作业 Ruby 进程每五秒激活一次。我该如何调试?
【问题讨论】:
-
使用以下命令启动延迟作业:RAILS_ENV=production script/delayed_job start