ruby on rails - perform - Rieles: iniciando Sidekiq en Heroku
sidekiq perform now (6)
Estoy teniendo problemas para ejecutar Sidekiq en mi aplicación Rails implementada en Heroku. Tengo mi aplicación funcionando bien en desarrollo (y en Heroku sin Sidekiq).
Creé un Procfile con:
worker: bundle exec sidekiq
Si ejecuto heroku ps
, el único proceso que veo es web.1
.
¿Debería ver uno para Sidekiq?
Me sale un error:
Redis::CannotConnectError (Error connecting to Redis on localhost:6379)
en mis registros de Heroku.
ACTUALIZACIÓN: Encontré que probablemente necesitaba heroku addons:add redistogo
. Sigue sin funcionar. Siento que me falta algo de configuración básica.
¿Hay algo que deba hacer para que Redis funcione y se ejecute en mi aplicación Heroku?
He estado usando Redis / Sidekiq durante aproximadamente un día, así que esto es nuevo para mí.
¡Gracias!
Greg
Comenzando con sidekiq versión 3.0 hay un paso adicional, ejecute heroku config:set REDIS_PROVIDER=REDISTOGO_URL
en la consola.
Este es el proceso que utilicé para Rails 4:
En la consola:
heroku addons:create redistogo
heroku config:set REDIS_PROVIDER=REDISTOGO_URL
En mi Procfile
agregué:
worker: bundle exec sidekiq
En mi gemfile.rb
agregué:
gem ''redis''
config/initializers/redis.rb
el siguiente archivo, config/initializers/redis.rb
:
uri = ENV["REDISTOGO_URL"] || "redis://localhost:6379/"
REDIS = Redis.new(:url => uri)
Aquí está el link a los documentos sidekiq.
Lo que descubrí es que tienes que escalar el proceso manualmente así:
heroku ps:scale worker+1
No tiene sentido ya que mi Procfile dijo:
web: bundle exec....
worker: bundle exec sidekiq
... y uno hubiera esperado que Heroku iniciara al trabajador automáticamente. Al final no tuve que escalar el proceso web ...
Además, puede tener problemas con esta línea: worker: bundle exec sidekiq
Agregar banderas para la concurencia:
worker: bundle exec sidekiq -c 5 -v
No, no necesitas ninguna configuración con Heroku para Sidekiq, simplemente agrega el complemento RedisToGo y listo . No olvides atribuir al menos 1 trabajador a tu aplicación en tu configuración de Heroku.
Aquí está mi Procfile predeterminado:
web: bundle exec thin start -p $PORT
worker: bundle exec sidekiq -c 5 -v
Parece que estás casi allí. ¿Es posible que solo necesites configurar REDISTOGO_URL en la configuración de heroku ?
heroku config
debería mostrarle el valor de redistogo?
Si copia eso en REDISTOGO_URL, entonces sidekiq debería funcionar?
heroku config:add REDISTOGO_URL=<redistogo value>
Editar: Sidekiq usará cualquiera de estos actualmente: https://github.com/mperham/sidekiq/blob/master/lib/sidekiq/redis_connection.rb#L29-L33
Edit2: Greg tiene razón en que no necesita agregar la configuración si está usando RedisToGo. Pero si usa OpenRedis u otros proveedores de Redis, entonces necesita agregar REDISTOGO_URL para Sidekiq
Por supuesto, puede ejecutar sidekiq junto a su cola de trabajos actual.
Nuestro Procfile actualmente se ve así:
web: bundle exec thin start -R config.ru -e $RAILS_ENV -p $PORT
worker: bundle exec rake jobs:work
sidekiq: bundle exec sidekiq -c 5 -v
Vale la pena comprobar si el proceso sidekiq realmente se inició con este comando:
heroku ps
Si no hay trabajador, entonces puede necesitar ejecutar este comando:
heroku ps:scale worker+1
Resulta que hay un error en la interfaz de usuario web en el sentido de que a algunos miembros del equipo no se les permitió aumentar el número de trabajadores de 0 a 1, ¡aunque la interfaz de usuario parecía mostrar eso!