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

时间:2015-11-20 11:49:42

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

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

Notifiers::MessageNotifierJobapp/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

1 个答案:

答案 0 :(得分:1)

解决。延迟工作或自动加载器不应该受到责备。

在添加这些新工作前一周(如Notifiers::MessageNotifierJob)我从1到4增加了延迟工作人员(使用capistrano3-delayed-job宝石)的数量。但是,capistrano3-delayed-job没有杀死旧的延迟工作流程,只开始新的4.所以我结束了一份旧工作,对我的新工作班没有任何了解。每当这个旧过程选择了该作业时,它就失败了。然后其中一个新流程选择了这个工作并成功了。