如何分离开发和生产sidekiq工人

时间:2019-12-26 17:56:12

标签: ruby-on-rails sidekiq

我在生产Rails服务器上运行sidekiq,它的某些队列工作人员最终出现在我的开发sidekiq实例中,因此会导致很多错误。我的开发sidekiq实例也会发生同样的事情。在应用程序的开发版本中,当我单击启动sidekiq辅助程序的内容时,有时会尝试在生产sidekiq实例中运行它,并且生产数据库没有相同的信息。

是否有适当的方法来分隔这些排队的作业,以便它们仅在它们启动的实例中运行?

1 个答案:

答案 0 :(得分:1)

Sidekiq使用Redis存储排队的作业。默认情况下,所有sidekiq实例将使用默认的Redis数据库。您可以通过在 config / initializers / sidekiq.rb

中创建一个初始化程序来更改此设置
if Rails.env == :production 
  redis_host = '127.0.0.1'
  redis_port = 6379
  redis_db = 1
else
  redis_host = '127.0.0.1'
  redis_port = 6379
  redis_db = 2
end

Sidekiq.configure_server do |config|
  config.redis = { url: "redis://#{redis_host}:#{redis_port}/#{redis_db}" }
end

Sidekiq.configure_client do |config|
  config.redis = { url: "redis://#{redis_host}:#{redis_port}/#{redis_db}" }  
end

并用适当的值更改redis_hostredis_portredis_db。这样,每个环境将使用单独的Redis数据库。同样不要忘了在启动带有以下内容的sidekiq实例时传递适当的环境:

bundle exec sidekiq -e production