我在生产Rails服务器上运行sidekiq,它的一些队列工作人员最终出现在我的开发sidekiq实例中,因此会导致很多错误。我的开发sidekiq实例也会发生同样的事情。当我处于应用程序的开发版本中,并且单击了可启动sidekiq工作程序的内容时,有时它会尝试在生产sidekiq实例中运行它,并且生产数据库没有相同的信息。
是否有适当的方法来分隔这些排队的作业,以便它们仅在它们启动的实例中运行?
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_host
,redis_port
和redis_db
。这样,每个环境将使用单独的Redis数据库。同样不要忘了在启动sidekiq实例时传递适当的环境,例如:
bundle exec sidekiq -e production