Rails 4 Delayed_job错误 - 作业加载失败:未定义的类/模块自定义作业



我花了几天时间,大约 100 个小时,但无法修复。

这是我的设置(使用 Rails 4.2.8(

class CustomJob < ActiveJob::Base
def perform(*args)
filename = args.first
data = File.read(filename)
#  process that data
end
end

当我运行Delayed::Job.enqueue CustomJob.new('filename')时,我得到主题中提到的错误。 作业已创建并添加到数据库中,但错误消息为"作业失败...">

我有这样一行:

require 'custom_job'

在几个地方,包括script/delayed_job.rbconfig/initializers/delayed_jobs.rbconfig/initializers/custom_job.rb和我调用作业的文件。

我还添加了这个:config.autoload_paths+=Dir[Rails.root.join('app','jobs')] config.active_job.queue_adapter = :delayed_job到我的config/application.rb文件

而这个:

config.threadsafe! unless defined? ($rails_rake_task) && $rails_rake_task

每次更改后,我还重新启动了服务器。 并验证delayed_job是否正在运行:

dir$ RAILS_ENV=development script/delayed_job status
delayed_job: running [pid 64503]

来源:

  • delayed_job作为守护程序运行时作业失败。使用耙子时运行良好 作业:工作
  • 延迟作业:"作业加载失败:未初始化的常量 Syck::Syck">
  • Rails 自定义延迟作业 - 未初始化的常量
  • 使用线程安全时未在延迟作业中加载模型类

我总觉得答案是显而易见的......在我想通之后。

问题是我使用的是共享数据库,并且有现有的工作人员访问此数据库。 虽然我正在重新启动并刷新服务器的本地实例,但其他实例正在尝试运行我的作业,并且其他工作线程导致错误,而不是我的本地实例。

解决方案:确保其他delayed_job实例使用与要测试/生成/使用的代码相同的表。如果是这样,请尽可能使用另一个数据库。

您也可以尝试将此行添加到 config/application.rb 文件中吗?

config.eager_load_paths+=Dir[Rails.root.join('app','jobs')]

最新更新