适用于多种环境的Sidekiq配置

我已经查看了多个来源并尝试了各种方案,但无法解决这个问题。 请指出我正确的方向。

像每个人一样,我有3个环境(开发,分期和生产)。

我在sidekiq.yml文件中有以下内容

# Options here can still be overridden by cmd line args. # sidekiq -C config.yml --- :verbose: false :namespace: xyz :logfile: log/sidekiq.log :concurrency: 25 :strict: false :pidfile: tmp/pids/sidekiq.pid :queues: - [stg_xyz_tests_queue, 10] - [stg_default_xyz_queue, 2] - [stg_xyz_default_queue, 3] development: :verbose: true :concurrency: 15 :queues: - [dev_xyz_queue, 10] - [dev_default_xyz_queue, 2] - [dev_xyz_default_queue, 3] staging: :queues: - [stg_xyz_queue, 10] - [stg_default_xyz_queue, 2] - [stg_xyz_default_queue, 3] production: :queues: - [prod_xyz_queue, 10] - [prod_default_xyz_queue, 2] - [prod_xyz_default_queue, 3] 

有了这个,我希望当我用命令启动sidekiq时

 RAILS_ENV=#{rails_env} bundle exec sidekiq -C config/sidekiq.yml 

它会从配置文件中获取所有值,并在log / sidekiq.log中使用相应的队列和日志文件启动sidekiq,但这不起作用。 Sidekiq启动但它只创建stg_xyz_tests_queue,stg_default_xyz_queue和stg_xyz_default_queue,无论我们使用什么环境。

我尝试的另一种方法是在config / environments / development.rb中使用以下代码

  #configure Sidekiq for dev environment Sidekiq.configure_server do |config| config.options[:namespace] = "xyz" config.options[:concurrency] = 25 config.options[:verbose] = true config.options[:strict] = false config.options[:logfile] = "log/sidekiq.log" config.options[:pidfile] = "tmp/pids/sidekiq.pid" queues = Array.new 10.times do queues.push "dev_xyz_queue" end 2.times do queues.push "dev_default_xyz_queue" end 3.times do queues.push "dev_xyz_default_queue" end config.options[:queues] = queues puts "Sidekiq server config options for development => #{config.options.to_yaml}" end 

有了这个,队列被创建好了,但是没有创建或写入日志文件,我需要为所有3个环境复制这个代码。

什么是让sidekiq无缝地为我的设置工作的最佳方式感谢您的帮助!

使用-e选项

 bundle exec sidekiq -e beta -C config/sidekiq.yml 

如果所有环境(开发,登台和生产)都在同一服务器上,则使用命名空间。 在initializers / sidekiq.rb文件中,

 Sidekiq.configure_server do |config| config.redis = { url: 'redis://localhost:6379/0', namespace: "sidekiq_app_name_#{Rails.env}" } end Sidekiq.configure_client do |config| config.redis = { url: 'redis://localhost:6379/0', namespace: "sidekiq_app_name_#{Rails.env}" } end 

使用-e传递环境。

 bundle exec sidekiq -e production -C config/sidekiq.yml 

感谢mperham的回答。

用于设置日志和环境支持:

 bundle exec sidekiq -d -L log/sidekiq.log -e production -C config/sidekiq.yml