每当不触发Sidekiq工作

时间:2014-10-16 16:26:25

标签: ruby-on-rails cron sidekiq whenever

我正在尝试设置Sidekiq调度程序来运行重复性作业。

我可以让Sidekiq作业在Rails控制台或Rails应用程序中正常运行。我可以得到Whenever触发命令。但是,无论何时触发Sidekiq工作,我都无法获得。

我在不同的机器上复制我的工作,在某些机器上,我让它工作。在大多数其他机器中,它无法正常工作。

这是我的设置:

# app/workers/create_random_product.rb
class CreateRandomProduct
  include Sidekiq::Worker

  def perform
    new_product = Product.new
    new_product.name = "Product #{Time.now}"
    new_product.price = 5.5
    new_product.save
  end
end

# config/schedule.rb
every 1.minute do
  runner "CreateRandomProduct.perform_async"
  command "echo 'hello' >> /home/vagrant/output.txt"
end

正如您在schedule.rb中看到的那样,我可以运行第二个命令,因为我可以看到输出已更新,但第一个运行器命令似乎没有做任何事情。 Sidekiq仪表板也没有显示任何活动。

运行“when”返回这些cron作业:

* * * * * /bin/bash -l -c 'cd /home/vagrant/sidekiqdemo && bin/rails runner -e production '\''CreateRandomProduct.perform_async'\'''

* * * * * /bin/bash -l -c 'echo '\''hello'\'' >> /home/vagrant/output.txt'

我手动运行第一个命令,它会触发Sidekiq作业。

我确实运行了"never -i“命令来更新crontab文件。我检查了crontab日志,我可以看到它试图触发Sidekiq作业:

Oct 16 16:15:01 vagrant-ubuntu-trusty-64 CRON[13062]: (vagrant) CMD (/bin/bash -l -c 'cd /home/vagrant/sidekiqdemo && bin/rails runner -e production '\''CreateRandomProduct.perform_async'\''')
Oct 16 16:15:01 vagrant-ubuntu-trusty-64 CRON[13063]: (vagrant) CMD (/bin/bash -l -c 'echo '\''hello'\'' >> /home/vagrant/output.txt')

我有什么遗失的吗?

1 个答案:

答案 0 :(得分:1)

我解决了这个定义新job_type的建议here。 为了实现这一点,您还必须安装sidekiq-client-cli

此外,我发现感谢this帖子,当从cron进程执行命令时,只设置了一组环境变量,所以在我的情况下,我的命令无效,因为BUNDLE_PATH没设定。最后我的工作job_type是这样的:

job_type :sidekiq, "cd :path && BUNDLE_PATH=/bundle /usr/local/bin/bundle exec sidekiq-client :task :output"

every 1.minute do
  sidekiq "push GenerateExportsWorker"
end

这就是为什么在我的情况下像

这样的命令
every 1.minute do
  command "echo 'you can use raw cron syntax too' >> /home/log/myscript.log 2>&1 "
end

尽管另一个。