2013-03-21 84 views
2

我不明白爲什麼我的Rake任務沒有從Resque Worker中運行。運行Rake任務沒有從工作人員內部運行

rake :send_this_email 

從控制檯正常工作,我只是想運行它作爲一個cron作業(如下),但同時從工人中調用rake任務東西沒有proplerly工作。

rescue_schedule.yml

send_this_email: 
    cron: "*/2 * * * *" 
    class: SendThisEmailWorker 
    args: 
    description: "Send email when condition defined in rake task is met" 

send_this_email_worker.rbworkers目錄中,其中的問題一定是,如果我可以手動從控制檯調用rake任務自己?

require 'rake' 

module SendThisEmailWorker 
    @queue = :send_this_email 

    def self.perform 
    Rake::Task["send_this_email"].invoke 
    end 
end 

當我開始我的開發服務器這個send_this_email耙任務運行,每2分鐘是否正確?這不是,重置管理面板將其顯示爲隊列中的作業。我在這裏錯過了什麼?

感謝您的關注。

從gerep評論

require 'rake' 

module SendThisEmailWorker 
    @queue = :send_this_email 

    def self.perform 
    puts "Hi from the console, I'm started" 
    Rake::Task["send_this_email"].invoke 
    end 
end 
+0

發現你有一個工人開始了嗎?爲了測試,在你的cronjob上放一個「放任何東西」,以確保它每2分鐘被調用一次,它將被打印在你的控制檯上 – Gerep 2013-03-21 19:56:25

+0

我添加了上面的內容,沒有任何內容被打印到控制檯,我的rake任務也輸出到控制檯。此外,在resque admin/interface中,我可以選擇立即開始工作,當我這樣做時,rake任務不會被調用,也不會收到任何電子郵件。 – 2013-03-21 20:06:38

+1

我相信我在這裏發現了我的問題的解決方案,我用以下'QUEUE = * rake environment resque:work rails s'重新啓動了我的服務器https://github.com/defunkt/resque/wiki/FAQ#how-do -i-ensure-my-rails-classesenvironment-is-loaded – 2013-03-21 20:14:01

回答

8

只更新require 'rake'是不夠的。例如,如果你這樣做 耙:: Task.tasks #list了所有任務

你會得到[]

你需要告訴你的工人類加載任務。 試試這個

require 'rake' 
Rake::Task.clear # necessary to avoid tasks being loaded several times in dev mode 
YOUR_APP_NAME::Application.load_tasks 
module SendThisEmailWorker 
    @queue = :send_this_email 

    def self.perform 
    puts "Hi from the console, I'm started" 
    Rake::Task["send_this_email"].invoke 
    end 
end 

YOUR_APP_NAME是你的應用程序的名稱,可以在config/application.rb