我的应用程序使用Delayed Job 的 Collective Idea fork异步发送电子邮件。问题是这在开发环境中可以正常工作,但在生产环境中却不行。这些工作没有失败(我已经检查了delayed_jobs
表格),它们只是没有被消耗。生产日志中没有什么值得注意的。
这是表中handler
列的内容delayed_jobs
:
--- !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 进程每五秒激活一次。我该如何调试呢?