我正在尝试使用delayed_job来处理某些任务,但它一直告诉我它无法看到我库中的函数。我在模型中包含了库,我在方法调用上调用了延迟。
Job.delay.save_job_data(job_id)
def self.save_job_data(job_id)
job = Job.find_by(id:job_id)
file = Marshal.dump(job.image_data)
save_file_to_AWS(file,job.file_name)
...
end
MyLibray
def save_file_to_AWS(file,file_name)
...
end
end
通过延迟访问我的代码的其他部分,是否有办法进行方法调用?
答案 0 :(得分:1)
之前我遇到过这个问题,而且我通过以下方式解决了这个问题:
创建了一个初始化文件config/initializers/load_classes_for_dj.rb
并在其中加入了类似的内容:
MyLib::MyClass1
MyLib::MyClass2
# init all classes inside lib/communication for delayed job
Dir["#{Rails.configuration.root}/lib/communication/**/*.rb"].each do |file|
require file
# get the ruby files, remove extension and camelize in order to get the class name
class_name = File.basename(file, ".rb").camelize
# evaluate class name; this will notify environment about class's existence
eval(class_name)
end
如果有更好的答案,我很高兴在这里看到它!
答案 1 :(得分:0)
我想到我的问题可能与我将该方法称为过程调用这一事实有关,因为没有涉及真正的结构。我通过将实用程序包装在实用程序类中,然后通过Utility.method调用它,将调用更改为对类的调用。
Delayed_job很满意。我没有继续使用Abdo解决方案,因为我还不需要它,但我会留意它,因为我再次遇到问题,也许我们会知道什么改变推动了delayed_job对edg。