2014-02-13 182 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