2013-03-07 71 views
16

我已經看過多個來源,並嘗試過各種方案,但無法解決這個問題。請指向正確的方向。多個環境的Sidekiq配置

和大家一樣,我有3個env(開發,分期和生產)。

我在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 /環境/ 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無縫工作我的設置 感謝您的幫助提前!

+0

[鏈接](https://github.com/mperham/sidekiq/issues/758 )Sidekiq網站的問題列爲問題 – user1687078 2013-03-07 00:22:54

回答

8

使用-e傳遞環境。

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

感謝mperham爲答案。

18

使用-e選項

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

如果所有環境(開發,分期和生產)是同一臺服務器上,然後使用命名空間。在你的初始化/ 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

如果它們不在同一臺服務器上,該怎麼辦? – 2014-02-20 15:37:34

+0

然後在這裏不需要設置命名空間。 – 2014-02-27 13:44:26

+0

我的意思是,如果你在不同的環境中使用不同的服務器,你將如何在初始化程序/ sidekiq.rb中定義sidekiq配置? – 2014-02-28 14:14:07

2

用於設置日誌和環境的支持:

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