代码之家  ›  专栏  ›  技术社区  ›  John Topley

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

  •  0
  • John Topley  · 技术社区  · 15 年前

    我的应用程序使用 Collective Idea fork of Delayed Job 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 
    

    Message 类别:

    def send_email
      FeedbackMailer.send_later(:deliver_message, self)
    end
    

    我知道ActionMailer代码在生产环境中正常工作,因为我在切换到延迟作业之前已经对其进行了同步测试。正如我所说的,在开发中成功地使用延迟作业,我也一直在运行它。

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

    3 回复  |  直到 15 年前
        1
  •  4
  •   Gustav Paul    15 年前

    是否使用运行./script/delayed\u作业 -e production 国旗?

        2
  •  1
  •   wesgarrison    15 年前

    log/delayed_job.log ? 您提到了生产日志,但延迟作业有自己的日志。

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

    class PreviewImageJob < Struct.new(:item_id)
      def perform
        item = Item.find(item_id)
        item.generate_interior_images!
      end
    end
    
        3
  •  1
  •   John Topley    15 年前

    厕所,

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

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