Sidekiq desplegar en múltiples entornos

(Vea a continuación mi configuración detallada, que es el resultado de la respuesta de Henley Chiu).

He estado tratando de envolver mi cerebro en los despliegues de Sidekiq, y realmente no lo estoy entendiendo. Tengo una aplicación con un entorno de prueba y un entorno de producción en el mismo servidor. Todo lo que veo acerca de las implementaciones de sidekiq básicamente dice "simplemente agregue sidekiq / capistrano a su archivo de implementación", así que hice eso. Y luego las instrucciones son "aquí hay un archivo yml con opciones" pero nada parece ser explicado. ¿Necesito espacios de nombres? Veo eso en un archivo de inicialización, pero parece ser que apunta fuera del servidor.

Desplegué anteriormente, y cada etapa parece arrancar sidekiq con el entorno adecuado, pero ambas se procesan desde las mismas colas. Mis correos electrónicos de producción intentaban ser procesados ​​por el escenario sidekiq, y fallaron. Paré mi escenario por ahora, pero eventualmente necesitaré usarlo nuevamente. Espero no estar siendo denso, realmente he tratado de entender esto y solo estoy teniendo dificultades para encontrar un "así es como se hace".

Para lo que vale, aquí está config / sidekiq.yml (que se carga bien durante el despliegue):

:concurrency: 5
:verbose: false
:pidfile: ./tmp/pids/sidekiq.pid
:logfile: ./log/sidekiq.log
:queues:
  - [carrierwave, 7]
  - [client_emails, 5]
  - [default, 3]
staging:
  :concurrency: 10
production:
  :concurrency: 25

Los archivos de registro y los pids parecen estar en el lugar correcto, pero las colas se fusionan. Cualquier ayuda sería genial!

Además, si importa:

Rails 3.2.11, passenger, nginx, rvm, Ubuntu 12.10, and Ruby 1.9.3
Configuración detallada (respuesta):

Primero configuré un nuevo servidor de redis en el puerto 7777 (o el puerto que desee, además del 6379 predeterminado). Bastante seguido elGuía de inicio rápido de redis que utilicé la primera vez.

Luego hice el archivo iniciador; Esto tiene tanto el cliente como la configuración del servidor. Ambos son requeridos para hacer que el sidekiq funcione en múltiples etapas.

Tenga en cuenta que estoy usando un archivo YAML externo para la configuración. estoy usandoConfiguraciónLógica para que esto haga las cosas más fáciles, pero usted puede fácilmentehaz esto tú mismo incluyendo el archivo. Al utilizar un archivo yaml, no tenemos que tocar nuestros entornos / archivos de producción o de puesta en escena.

# config/initializers/sidekiq.rb
server = Settings.redis.server
port = Settings.redis.port
db_num = Settings.redis.db_num
namespace = Settings.redis.namespace

Sidekiq.configure_server do |config|  
  config.redis = { url: "redis://#{server}:#{port}/#{db_num}", namespace: namespace  }
end

Estoy usando pasajero - elPágina de solución de problemas de la wiki de sidekiq recomienda un cambio para la configuración cuando se usa unicorn o pasajero, así que agregué el código allí para la configuración del cliente:

# config/initializers/sidekiq.rb (still)
if defined?(PhusionPassenger)
  PhusionPassenger.on_event(:starting_worker_process) do |forked|
    Sidekiq.configure_client do |config|
      config.redis = { url: "redis://#{server}:#{port}/#{db_num}", namespace: namespace }
    end if forked
  end
end

Este es mi archivo de configuración (obviamente los valores han cambiado):

#config/settings.yml
defaults: &defaults
  redis: &redis_defaults
    server: 'localhost'
    port: 6379
    db_num: 0
    namespace: 'sidekiq_development'

development:
  <<: *defaults

test:
  <<: *defaults

staging:
  <<: *defaults
  redis:
    <<: *redis_defaults
    port: 8888
    namespace: 'sidekiq_staging'

production:
  <<: *defaults
  redis:
    <<: *redis_defaults
    port: 7777
    namespace: 'sidekiq_production'

Descubrí que agregar el espacio de nombres al archivo config / sidekiq.yml no parecía funcionar; sidekiq arrancaría en el despliegue usando el puerto correcto, pero en realidad no procesaría nada. Pero como la wiki recomienda usar un espacio de nombres, acabé de agregarlo al archivo de inicio.

Espero que esto sea de utilidad para los demás, porque me resultó muy difícil de entender, ya que no había hecho mucho de este tipo de configuración antes.

Respuestas a la pregunta(3)

Su respuesta a la pregunta