【问题标题】:DelayedJob sometimes cannot load job class with a namespaceDelayedJob 有时无法使用命名空间加载作业类
【发布时间】:2015-11-24 14:15:29
【问题描述】:

有时我在delayed_job worker 中遇到错误 NameError: uninitialized constant Notifiers::MessageNotifierJob 完整回溯https://gist.github.com/olegantonyan/eeca9d612f9a10864efe

Notifiers::MessageNotifierJob 定义在app/jobs/notifiers/message_notifier_job.rb

有时我的意思是这项工作可能会失败 -> 重试 -> 成功。与另一个具有命名空间的作业相同。没有命名空间的作业可以正常工作。

我尝试将app/jobs/ 显式添加到自动加载路径,但没有任何运气 config.autoload_paths += Dir[ Rails.root.join('app', 'jobs', '**/') ]

作业本身是这样的

module Notifiers
  class MessageNotifierJob < BaseNotifierJob
    def perform(from, to, text)
      # some code to send slack notification
    end
  end
end

【问题讨论】:

    标签: ruby-on-rails ruby delayed-job autoload


    【解决方案1】:

    解决了。作业延误或自动装载机不应受到责备。

    在添加这些新工作(如 Notifiers::MessageNotifierJob)前一周,我将延迟工作的工作人员(使用 capistrano3-delayed-job gem)从 1 增加到 4。但是,capistrano3-delayed-job 并没有杀死旧的延迟工作流程,并且只开始了新的 4。所以我最终得到了一份旧工作,而对我的新工作课程一无所知。每当这个旧流程选择工作时,它就会失败。然后其中一个新流程选择了这项工作并成功了。

    【讨论】:

    • 这应该被标记为正确答案。遇到了同样的问题。
    猜你喜欢
    • 2023-04-10
    • 2017-10-26
    • 2011-06-22
    • 1970-01-01
    • 2013-03-12
    • 2014-09-03
    • 1970-01-01
    • 1970-01-01
    • 2014-10-10
    相关资源
    最近更新 更多