DelayedJob 有时无法使用命名空间加载作业 class

DelayedJob sometimes cannot load job class with a namespace

有时我在 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

已解决。延迟的工作或自动加载器不是罪魁祸首。

在添加这些新工作(如 Notifiers::MessageNotifierJob)前一周,我将延迟工作人员(使用 capistrano3-delayed-job gem)的数量从 1 增加到 4。但是,capistrano3 -delayed-job 没有杀死旧的延迟作业进程,只启动了新的 4。所以我在不知道我的新工作的情况下结束了一份旧工作 类。每当这个旧进程选择工作时,它就会失败。然后其中一个新进程选择了这个工作并成功了。