delay_job访问的范围是什么

时间:2014-02-13 04:33:35

标签: ruby-on-rails background delayed-job

我正在尝试使用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

通过延迟访问我的代码的其他部分,是否有办法进行方法调用?

2 个答案:

答案 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。