我有一个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
我可以看到队列中的作业,但它不像本地那样处理。任何建议都非常感谢 - 谢谢!
答案 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)
您还需要将服务器配置为使用相同的命名空间。