我在生产 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
关于ruby-on-rails - 如何分离开发和生产 sidekiq 工作人员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59491804/