Ruby on rails 延迟工作在开发中起作用,但在生产中不起作用

Ruby on rails 延迟工作在开发中起作用,但在生产中不起作用,ruby-on-rails,delayed-job,Ruby On Rails,Delayed Job,我的应用程序使用异步发送电子邮件。问题是,这在开发环境中运行良好,但在生产环境中却不起作用。作业没有失败(我已经检查了delayed_jobs表),它们只是没有被消耗。生产日志中没有任何值得注意的内容 这是delayed_jobs表中handler列的内容: --- !ruby/struct:Delayed::PerformableMethod \ object: CLASS:FeedbackMailer\ method: :deliver_message\ args: \ - AR:Messa

我的应用程序使用异步发送电子邮件。问题是,这在开发环境中运行良好,但在生产环境中却不起作用。作业没有失败(我已经检查了
delayed_jobs
表),它们只是没有被消耗。生产日志中没有任何值得注意的内容

这是
delayed_jobs
表中
handler
列的内容:

--- !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 
def send_email
  FeedbackMailer.send_later(:deliver_message, self)
end
我知道ActionMailer代码在生产环境中正常工作,因为我在切换到延迟作业之前已经对其进行了同步测试。正如我所说的,在开发中成功地使用延迟作业,我也一直在运行它


如果我在服务器上运行
top
命令,那么我可以看到延迟的作业Ruby进程每五秒钟活跃一次。我如何调试这个?

您是否运行带有
-e production
标志集的/script/delayed\u作业?

您是否运行带有
-e production
标志集的/script/delayed\u作业?

日志/delayed\u作业.log中是否显示任何内容?您提到了生产日志,但延迟作业有自己的日志

  • [作业]获取PreviewImageJob上的锁定
您可以尝试创建一个单独的类,而不是使用_later()方法

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

  • [作业]获取PreviewImageJob上的锁定
您可以尝试创建一个单独的类,而不是使用_later()方法

class PreviewImageJob
约翰

虽然我也使用了集体创意叉子,但我发现托比的脚本也很有效。我只需要一个tmp/pid目录(您可能有),然后您就可以得到日志文件,并可以将该文件与延迟::Job.first记录(当然也可以是任何作业)中的错误列进行交叉引用

哦,如果你做了正确的更改,你确实重新启动了吗?不得不问。约翰

虽然我也使用了集体创意叉子,但我发现托比的脚本也很有效。我只需要一个tmp/pid目录(您可能有),然后您就可以得到日志文件,并可以将该文件与延迟::Job.first记录(当然也可以是任何作业)中的错误列进行交叉引用


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

您运行我与
RAILS\u ENV=production script/delayed\u job start一起使用的fork
您运行我与
RAILS\u ENV=production script/delayed\u job start一起使用的fork
我没有延迟作业的日志文件。它是一个配置选项吗?我尝试使用单独的类-它在开发中有效,但在生产中无效。生产日志目录可写?“触摸日志/延迟的作业。日志'?我的在启动时才出现,所以我记得。我没有延迟工作的日志文件。它是一个配置选项吗?我尝试使用单独的类-它在开发中有效,但在生产中无效。生产日志目录可写?“触摸日志/延迟的作业。日志'?我的工作刚开始时就出现了,所以我记得。我无法解释原因,但换成原来的延迟工作解决了它!我无法解释原因,但换成原来的延迟工作解决了它!使用以下命令启动延迟作业:RAILS\u ENV=生产脚本/延迟作业启动使用以下命令启动延迟作业:RAILS\u ENV=生产脚本/延迟作业启动
class PreviewImageJob < Struct.new(:item_id)
  def perform
    item = Item.find(item_id)
    item.generate_interior_images!
  end
end