我正在尝试在rails网站上运行cron作业以在后台执行日常任务。我正在使用Sidekiq来完成这项工作。
似乎所有内容都正常运行,直到它应该在worker中执行“perform”方法,除了此方法中的所有代码都不执行。它按计划添加到队列中,并且运行任务的sidekiq日志,但没有任何反应。我知道perform方法中的代码可以工作,因为我已经将它加载到rails控制台并在那里运行方法,它完全符合预期。当Sidekiq运行它时,它就不会这样做。
crontab -l </ p>的输出
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 Log
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 :(得分:0)
问题在于sidekiq是如何运行的。我只是在执行测试时在服务器上运行它:
force
一旦我在服务器上设置它作为系统服务运行,它就可以工作了。将其设置为系统服务的部分命令是将环境设置为生产,因此我怀疑这是问题,因为原始命令没有这样做。