Rails Sidekiq Worker 不会执行

Rails Sidekiq Worker Won't Execute

我正在尝试 运行 在 rails 站点上执行 cron 作业以在后台执行日常任务。我正在使用 Sidekiq 运行 这份工作。

似乎一切都 运行 正确,直到它应该在 worker 中执行 "perform" 方法,除了执行此方法中的 none 代码.它按计划添加到队列中,sidekiq 记录该任务是 运行,但没有任何反应。我知道 perform 方法中的代码有效,因为我已将它加载到 rails 控制台和 运行 那里的方法,它完全符合预期。它只是在 Sidekiq 运行s 时不这样做。

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

让我知道您是否需要看其他任何东西来诊断。我没有收到任何错误或重试。但它不会保存评论,也不会发送邮件。然而,当我通过控制台 运行 它时,它确实如此。是的,我已经重置了数据,因此它应该可以捕获它并通过控制台确认这一点。

非常感谢任何帮助

问题在于 sidekiq 运行 的表现。我在服务器上 运行 在测试时通过简单地执行它来测试它:

bundle exec sidekiq

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