5
在我们的Rails应用程序中。我们保存一个模型(视频)。我们有对象的回调:为什么我的重新找工作找不到对象?
after_create :send_to_background_job, :if => :persisted?
的方法是这样的:
def send_to_background_job
Resque.enqueue(AddVideo, self.id)
end
当工人被调用。它具有以下功能:
class AddVideo
@queue = :high
def self.perform(video_id)
video = Video.find(video_id)
video.original_file_name
....
Resque的Web报告错误:
AddVideo
Arguments
51061
Exception
NoMethodError
Error
undefined method `original_filename' for nil:NilClass
这是一个有点古怪,因为,如果我去Rails的控制台来寻找这个视频。它确实存在。此外,在第二次调用Resque.enqueue(AddVideo, 51061)
时,运行没有任何错误。
这好像需要更多时间才能保存数据库中的记录,而不是创建worker/job。但是即使这个语句没有加起来,因为对象只有在对象被保存后才会调用Resque作业。在Rails中,这是通过模型中的回调方法完成的(after_create
)。
不知道这是否在问题中发挥作用。在一个初始化文件,我有:
Resque.before_fork do
defined?(ActiveRecord::Base) and
ActiveRecord::Base.connection.disconnect!
end
Resque.after_fork do
defined?(ActiveRecord::Base) and
ActiveRecord::Base.establish_connection
end