我的应用程序使用 延迟工作的集体思想叉 异步发送电子邮件。问题是这在开发环境中运行良好,但在生产环境中却不起作用。这些工作并没有失败(我已经检查过 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 进程每五秒活跃一次。我该如何调试这个?

有帮助吗?

解决方案

约翰,

虽然我也用集体观念叉,我发现托比的脚本工作过。我只是需要一个TMP / PID目录(你可以有),你得到的日志文件,并可以交叉引用与你的错误列在您的延迟:: Job.first纪录说,这个文件(或它当然是什么工作) 。脚本运行从TOBI叉一个守护进程

哦,你没有重新启动,如果所做的更改吗?不得不要求。

其他提示

您与-e production标志集运行./script/delayed_job?

有什么东西出现在 日志/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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top