适用于多种环境的Sidekiq配置

时间:2013-03-07 00:02:24

标签: ruby-on-rails ruby 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无缝地为我的设置工作的最佳方法是什么 感谢您的帮助!!!

3 个答案:

答案 0 :(得分:18)

使用-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     

答案 1 :(得分:8)

使用-e传递环境。

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

感谢mperham的答案。

答案 2 :(得分:0)

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

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