0

我的应用程序使用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 进程每五秒激活一次。我该如何调试呢?

4

3 回答 3

4

-e production您是否在设置标志的情况下运行 ./script/delayed_job ?

于 2009-11-14T15:50:47.730 回答
1

log/delayed_job.log中是否出现任何内容?您提到了生产日志,但延迟作业有自己的日志。

  • [JOB] PreviewImageJob 获取锁

您可以尝试创建一个单独的类,而不是使用 _later() 方法。

class PreviewImageJob < Struct.new(:item_id)
  def perform
    item = Item.find(item_id)
    item.generate_interior_images!
  end
end
于 2009-11-14T23:13:29.837 回答
1

约翰,

虽然我也使用了集体的 Idea fork,但我发现 Tobi 的脚本也可以工作。我只需要一个 tmp/pid 目录(你可能有),你就可以得到日志文件,并可以用你的错误列在你的 Delayed::Job.first 记录(或者当然是任何工作)中交叉引用这个文件. 从 tobi fork 作为守护进程运行的脚本

哦,如果您进行了更改,您确实重新启动了?不得不问。

于 2009-11-15T12:38:22.730 回答