我的应用程序使用Collective Idea fork of Delayed Job异步发送电子邮件。问题是这在开发环境中工作正常,但在生产环境中不能正常工作。工作没有失败(我已经检查了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代码在生产中正常工作,因为我在切换到延迟作业之前已经同步测试了它。正如我所说的那样,我也一直在成功使用Delayed Job进行开发。
如果我在服务器上运行top
命令,那么我可以看到延迟作业Ruby进程每五秒钟就会生效一次。我该怎么调试呢?
答案 0 :(得分:4)
您是否设置了-e production
标志设置的./script/delayed_job?
答案 1 :(得分:1)
log / delayed_job.log 中是否有任何内容?您提到了生产日志,但延迟的作业有自己的日志。
您可以尝试创建一个单独的类,而不是使用_later()方法。
class PreviewImageJob < Struct.new(:item_id)
def perform
item = Item.find(item_id)
item.generate_interior_images!
end
end
答案 2 :(得分:1)
约翰,
虽然我也使用了集体的Idea分叉,但我发现Tobi的脚本也有效。我只需要一个tmp / pid目录(您可能拥有)并获得日志文件,并且可以使用您的错误列在您的Delayed :: Job.first记录(或者当然是任何工作)中交叉引用此文件。 Script for running as a daemon from tobi fork
哦,如果你做了更改,你确实重启了吗?不得不问。