2014-02-13 184 views
1

我想使用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 

有没有办法通过延迟访问我的代码的其他部分的方法调用吗?

回答

0

我想到我的问题可能与我将该方法称为过程调用的事实有关,因为没有涉及真正的结构。我通过将实用程序包装在实用程序类中,然后通过Utility.method调用它们,将该调用更改为类上的调用。

Delayed_job对此感到满意。我没有继续使用Abdo解决方案,因为我不需要它,但是我会保持注意,否则我会再次遇到问题,也许那么我们会知道什么更改会将delayed_job推到edg上。

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 

如果有更好的答案,我很高兴看到它在这里!

+0

我想知道是不是因为我正在调用例程而不是调用类上的方法。我要去试一试,看看是否改变了代码,这是一个Class.method调用。 – bobbdelsol

+0

期待听到回复,如果这对你有用:-) – Abdo

+0

看到我上面的答案。将其更改为解决delayed_job问题的类的方法调用。 – bobbdelsol