Конфигурация Sidekiq для нескольких сред - программирование
Подтвердить что ты не робот

Конфигурация 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

что он будет извлекать все значения из файла конфигурации и запускать sidekiq с соответствующими очередями и файлом журнала в log/sidekiq.log, но это не работает. Sidekiq запускается, но он создает только stg_xyz_tests_queue, stg_default_xyz_queue и stg_xyz_default_queue независимо от того, какую среду мы используем.

Другой подход, который я пробовал, - использовать следующий код в config/environment/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

При этом очереди создаются нормально, но файл журнала не создается или не записывается, и мне нужно дублировать этот код для всех трех сред.

Каков наилучший способ заставить sidekiq работать без проблем для моей настройки? Спасибо за вашу помощь заранее.

4b9b3361

Ответ 1

Использовать -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     

Ответ 2

Используйте -e для передачи среды.

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

Благодаря mperham для ответа.

Ответ 3

Использовать для установки журнала и поддержки среды:

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