Sidekiq的工作在Heroku上排队

时间:2014-10-08 17:37:13

标签: ruby ruby-on-rails-4 heroku redis sidekiq

我有一个Sidekiq工作者在本地运行良好,但当部署到Heroku时,作业被卡在队列中。我正在使用Redis-to-go nano并将其启动并运行,并且我已经在Heroku上将工作人员调整为1,并且可以看到它已经启动。我只是使用默认队列 - 没有自定义或花哨。这是我的代码:

配置/ unicorn.rb:

Sidekiq.configure_client do |config|
  config.redis = { size: 1, namespace: 'sidekiq' }
end

配置/初始化/ redis.rb

uri = URI.parse(ENV["REDISTOGO_URL"] || "redis://localhost:6379")
REDIS = Redis.new(:url => ENV['REDISTOGO_URL'])

Procfile

web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb
worker: bundle exec sidekiq -c 5 -v -q default

我可以看到队列中的作业,但它不像本地那样处理。任何建议都非常感谢 - 谢谢!

3 个答案:

答案 0 :(得分:6)

不确定问题究竟是什么,但是按照本教程的说法进行了一些修改: http://manuelvanrijn.nl/blog/2012/11/13/sidekiq-on-heroku-with-redistogo-nano/

简而言之,我将配置移动到sidekiq.rb初始化程序中,并删除了所有url和名称空间信息。

require 'sidekiq'

Sidekiq.configure_client do |config|
config.redis = { :size => 1 }
end

Sidekiq.configure_server do |config|
config.redis = { :size => 4 }
end

我引用的教程链接有一个方便的计算器来确定正确的大小值。仍然不确定这是否是绊倒我或者Mark的答案中提到的某些版本的命名空间冲突。

另外,我没有使用本教程的sidekiq.yml部分,因为sidekiq wiki说较新版本的rails不喜欢它。相反,我在Procfile的bundle exec命令中将并发设置为2,如下所示:

worker: bundle exec sidekiq -c 2  

希望这对将来遇到类似问题的人有所帮助!感谢所有试图提供帮助的人。

答案 1 :(得分:1)

在这里添加我的两分钱:在我的情况下,我忘了将队列的名称添加到config / sidekiq.yml =]

答案 2 :(得分:0)

您还需要将服务器配置为使用相同的命名空间。

相关问题