Rails Sidekiq工作人员不会执行

时间:2016-01-13 15:03:56

标签: ruby-on-rails-4 sidekiq

我正在尝试在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

如果您需要查看其他任何可以诊断的内容,请与我们联系。我没有收到任何错误或重试。但它不保存评论,也不发送邮件。但是当我通过控制台运行它时它会这样做。是的,我已经重置数据,所以它应该抓住它并通过控制台确认。

非常感谢任何帮助

1 个答案:

答案 0 :(得分:0)

问题在于sidekiq是如何运行的。我只是在执行测试时在服务器上运行它:

force

一旦我在服务器上设置它作为系统服务运行,它就可以工作了。将其设置为系统服务的部分命令是将环境设置为生产,因此我怀疑这是问题,因为原始命令没有这样做。