延迟工作在开发中工作,但在生产中不工作

时间:2009-11-14 12:59:51

标签: ruby-on-rails delayed-job

我的应用程序使用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进程每五秒钟就会生效一次。我该怎么调试呢?

3 个答案:

答案 0 :(得分:4)

您是否设置了-e production标志设置的./script/delayed_job?

答案 1 :(得分: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

答案 2 :(得分:1)

约翰,

虽然我也使用了集体的Idea分叉,但我发现Tobi的脚本也有效。我只需要一个tmp / pid目录(您可能拥有)并获得日志文件,并且可以使用您的错误列在您的Delayed :: Job.first记录(或者当然是任何工作)中交叉引用此文件。 Script for running as a daemon from tobi fork

哦,如果你做了更改,你确实重启了吗?不得不问。