升级到Rails 4.2,一切都在本地工作正常,推向生产' kaboom'。每个Delayed :: Job都以相同的错误失败。
Job failed to load: undefined method 'fetch_value' for #. Handler: " --- YAMLYAMLYAMLYAML "
我们得到的错误信息来自下面的函数,该函数调用不同的库,捕获实际错误,并返回自己的错误,这使得调试变得非常困难。
def payload_object
@payload_object ||= YAML.load_dj(handler)
rescue TypeError, LoadError, NameError, ArgumentError, SyntaxError, Psych::SyntaxError => e
raise DeserializationError, "Job failed to load: #{e.message}. Handler: #{handler.inspect}"
end
其他可能有用的东西,我们只使用Delayed :: Job(不使用Active :: Job)。
永远不会在delayed_job中调用fetch_value,它是一个Active :: Record方法。答案 0 :(得分:2)
当我将应用程序升级到Rails 4.2.1时,我遇到了类似的fetch_value
错误。要更深入地了解错误,请使用此错误抓取任何作业并在rails控制台中运行以下命令:
YAML.load_dj(Delayed::Job.find(JOB_ID).handler)
它运行内部延迟的作业代码,但应该为您提供更好的调试跟踪。
来源:https://github.com/collectiveidea/delayed_job/blob/master/lib/delayed/backend/base.rb#L90
错误可能是在Rails 4.2升级之前排队/创建作业以及在application.rb中设置config.active_job.queue_adapter = :delayed_job
之前的结果。如果未正确设置配置,则作业将以Rails 4.2无法处理的格式序列化。要运行fetch_value
错误的任何作业,您可以切换到仍然在>上的代码分支。 Rails 4.2并从rails控制台运行作业。
答案 1 :(得分:0)