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。所以我在不知道我的新工作的情况下结束了一份旧工作 类。每当这个旧进程选择工作时,它就会失败。然后其中一个新进程选择了这个工作并成功了。
有时我在 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。所以我在不知道我的新工作的情况下结束了一份旧工作 类。每当这个旧进程选择工作时,它就会失败。然后其中一个新进程选择了这个工作并成功了。