我正在嘗試在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
讓我知道如果你需要看別的診斷。我沒有收到任何錯誤或重試。但它不保存評論,也不會發送郵件。但是,當我通過控制檯運行它時就會發生。是的,我已經重置了數據,所以它應該可以抓住它並通過控制檯確認。
任何幫助將不勝感激
我會建議使用https://github.com/seuros/capistrano-sidekiq進行部署,以使事情正確啓動。它還允許您爲每個服務器配置多個進程以及您應該運行sidekiq的哪些服務器角色。並且它給了你一個帽子sidekiq:重啓命令行任務。而不是使用crontab,我喜歡https://github.com/ondrejbartas/sidekiq-cron。時間表存儲在Redis中。 –
感謝您的意見。我實際上是在每當設置cron的時候,這似乎對我的目的很好。我還沒有與卡皮斯特拉諾搞混,但似乎在社區中很受歡迎。我將不得不檢查出來。 – unclesol
無論什麼時候是一個好的寶石,我在我的應用程序中用它來做其他事情。我建議檢查capistrano或其他部署工具。真的簡化了事情。 –