2013-03-07 12 views
16

Ich habe mehrere Quellen angeschaut und verschiedene Szenarien ausprobiert, konnte dies aber nicht lösen, daher das Problem. Bitte zeigen Sie mir in die richtige Richtung.Sidekiq Konfiguration für mehrere Umgebungen

Wie jeder habe ich 3 env (Entwicklung, Inszenierung und Produktion).

Ich habe folgendes in meiner sidekiq.yml Datei

# 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] 

Damit ich hatte gehofft, dass, wenn ich starten sidekiq mit dem Befehl

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

, dass es würde Pickup alle Werte aus der Konfigurationsdatei und starten sidekiq mit den entsprechenden Warteschlangen und Protokolldatei bei log/sidekiq.log, aber das funktioniert nicht. Sidekiq startet, aber es erstellt nur die stg_xyz_tests_queue, stg_default_xyz_queue und stg_xyz_default_queue, egal welche Umgebung wir verwenden.

Der andere Ansatz, den ich versuchte, wurde in der config/Umgebungen/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 

Mit diesen Warteschlangen erstellt ok den folgenden Code verwenden, aber die Log-Datei wird nicht erstellt oder geschrieben, und ich brauche zu duplizieren Dieser Code für alle 3 Umgebungen.

Was ist der beste Weg, Sidekiq nahtlos für meine Einrichtung arbeiten Vielen Dank für Ihre Hilfe im Voraus!

+0

[link] (https://github.com/mperham/sidekiq/issues/758) Sidekiq Website hat die gleiche Frage als Problem aufgeführt – user1687078

Antwort

8

Verwenden Sie -e, um die Umgebung zu übergeben.

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

Danke an mperham für die Antwort.

18

Verwenden Option -e

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

Wenn alle Umgebungen (Entwicklung, Inszenierung und Produktion) auf demselben Server sind dann Namespace verwenden. In Ihrer initializers/sidekiq.rb Datei,

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

Und was ist, wenn sie nicht alle auf dem gleichen Server sind? –

+0

Dann ist es nicht notwendig, den Namespace hier zu setzen. –

+0

Ich meinte, wie würden Sie die Sidekiq Config in Initializers/sidekiq.rb definieren, wenn Sie verschiedene Server für verschiedene Umgebungen verwenden würden? –

2

Zum Einstellen einzuloggen, und Umwelt-Unterstützung:

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