2013-03-07 11 views
16

Przyjrzałem się wielu źródłom i próbowałem różnych scenariuszy, ale nie mogłem rozwiązać tego problemu, stąd ten problem. Proszę wskazać mi właściwy kierunek.Konfiguracja Sidekiq dla wielu środowisk

Tak jak wszyscy, mam 3 env (rozwój, inscenizacja i produkcja).

Mam następujących w moim pliku 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] 

Mając to miałem nadzieję, że kiedy zacznę sidekiq z poleceniem

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

że miałoby to pickup wszystkie wartości z plik konfiguracyjny i uruchom sidekiq z odpowiednimi kolejkami i plikiem dziennika w log/sidekiq.log, ale to nie działa. Sidekiq uruchamia się, ale tworzy tylko stg_xyz_tests_queue, stg_default_xyz_queue i stg_xyz_default_queue niezależnie od używanego środowiska.

Drugie podejście próbowałem używałem następujący kod w config/środowiskach/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 

Z tej kolejki tworzone są ok, ale plik dziennika nie jest tworzony lub pisemne i muszę powielić ten kod dla wszystkich 3 środowisk.

Jaki jest najlepszy sposób, aby sidekiq działało bezproblemowo dla mojej konfiguracji Dzięki za pomoc z góry !!!

+0

[link] (https://github.com/mperham/sidekiq/issues/758) Strona Sidekiq ma to samo pytanie, które zostało wymienione jako numer – user1687078

Odpowiedz

8

Użyj opcji -e, aby przekazać środowisko.

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

Podziękowania dla mperham za odpowiedź.

18

użyj: -e opcji urządzenie

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

Jeśli wszystkie środowiska (rozwój, postoju i produkcyjne) są na tym samym serwerze, a następnie używać nazw. W swojej initializers/pliku 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

A jeśli nie wszystkie są na tym samym serwerze? –

+0

Wtedy nie trzeba tutaj ustawiać przestrzeni nazw. –

+0

Chodziło mi o to, jak zdefiniowałbyś konfigurację sidekiq w initializers/sidekiq.rb, jeśli używasz różnych serwerów dla różnych środowisk? –

2

Służy do ustawienia dziennika i wsparcie środowiska:

bundle exec sidekiq -d -L log/sidekiq.log -e production -C config/sidekiq.yml 
Powiązane problemy