2016-01-13 64 views
0

我正在嘗試在Rails站點上運行cron作業以在後臺執行日常任務。我正在使用Sidekiq來運行這項工作。Rails Sidekiq Worker不會執行

似乎所有東西都正常運行,直到它應該在worker中執行「perform」方法,除了此方法中沒有代碼執行。它按計劃添加到隊列中,並將sidekiq日誌添加到該任務已運行,但沒有任何反應。我知道perform方法中的代碼是有效的,因爲我已經將它加載到rails控制檯並在那裏運行該方法,並且它完全符合預期。 Sidekiq運行它時不會這樣做。

從crontab的輸出-l

0 1 * * * /bin/bash -l -c 'cd /home/xxxx/yyy && environment_variable=production bundle exec sidekiq-client push ReviewWorker' 

0,5,10,15,20,25,30,35,40,45,50,55 * * * * /bin/bash -l -c 'cd /home/xxxx/yyy && environment_variable=production bundle exec sidekiq-client push ReviewWorker' 

工人代碼

class ReviewWorker 
    include Sidekiq::Worker 
    def perform 
     containers = Container.where(display_listing: true, review_trigger_date: Time.zone.now.beginning_of_day..Time.zone.now.end_of_day) 
     containers.each do |container| 
      unless container.reviews.size > 0 
       review = Review.new(container_id: container.id) 
       review.save 
       ReviewMailer.initial_review(container).deliver 
      end 
     end 
     containers = Container.where(display_listing: true, review_trigger_date: 7.days.ago.beginning_of_day..7.days.ago.end_of_day) 
     containers.each do |container| 
      unless container.reviews.size > 1 
       review = Review.new(container_id: container.id) 
       review.save 
       ReviewMailer.followup_review(container).deliver 
      end 
     end 
     containers = Container.where(display_listing: true, review_trigger_date: 14.days.ago.beginning_of_day..14.days.ago.end_of_day) 
     containers.update_all(display_listing: false) 
    end 
end 

Sidekiq登錄

2016-01-13T14:55:03.028Z 22748 TID-qvycc ReviewWorker JID-7d1ae22cd06a1e0515de4aef INFO: start 
2016-01-13T14:55:03.270Z 22748 TID-qvycc ReviewWorker JID-7d1ae22cd06a1e0515de4aef INFO: done: 0.243 sec 

讓我知道如果你需要看別的診斷。我沒有收到任何錯誤或重試。但它不保存評論,也不會發送郵件。但是,當我通過控制檯運行它時就會發生。是的,我已經重置了數據,所以它應該可以抓住它並通過控制檯確認。

任何幫助將不勝感激

回答

0

問題是如何運行sidekiq。我被簡單地執行運行它在測試服務器上:

bundle exec sidekiq 

一旦我把它在服務器上作爲系統服務運行,它的工作,雖然。將其設置爲系統服務的命令的一部分是將環境設置爲生產環境,所以我懷疑這是問題,因爲原始命令沒有這樣做。

+0

我會建議使用https://github.com/seuros/capistrano-sidekiq進行部署,以使事情正確啓動。它還允許您爲每個服務器配置多個進程以及您應該運行sidekiq的哪些服務器角色。並且它給了你一個帽子sidekiq:重啓命令行任務。而不是使用crontab,我喜歡https://github.com/ondrejbartas/sidekiq-cron。時間表存儲在Redis中。 –

+0

感謝您的意見。我實際上是在每當設置cron的時候,這似乎對我的目的很好。我還沒有與卡皮斯特拉諾搞混,但似乎在社區中很受歡迎。我將不得不檢查出來。 – unclesol

+0

無論什麼時候是一個好的寶石,我在我的應用程序中用它來做其他事情。我建議檢查capistrano或其他部署工具。真的簡化了事情。 –