Rails: Comenzando Sidekiq en Heroku


Tengo un problema para poner en marcha Sidekiq en mi aplicación Rails desplegada de Heroku. Tengo mi aplicación funcionando bien en desarrollo (y en Heroku sin Sidekiq).

He creado un Procfile con:

worker: bundle exec sidekiq

Si corro heroku ps, el único proceso que veo es web.1.

¿Debería ver uno para ¿Sidekiq?

Recibo 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. Todavía no funciona. Siento que me falta algo básico configuración.

¿Hay algo que deba hacer para poner en marcha Redis para mi aplicación Heroku?

He estado usando Redis/Sidekiq durante aproximadamente un día, así que esto es nuevo para mí.

Gracias!

Greg

Author: Flip, 2012-12-08

6 answers

No no necesita ninguna configuración con Heroku para Sidekiq, solo agregue el complemento RedisToGo y listo. No olvide atribuir al menos 1 worker a su aplicación en su configuración de Heroku.

Aquí está mi Procfile predeterminado:

web: bundle exec thin start -p $PORT
worker: bundle exec sidekiq -c 5 -v
 50
Author: gdurelle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-12-19 09:04:46

Vale la pena comprobar si el proceso sidekiq realmente se inicia con este comando:

heroku ps

Si no hay ningún worker, entonces es posible que necesite ejecutar este comando:

heroku ps:scale worker+1

Resulta que hay un error en la interfaz de usuario web en el que algunos miembros del equipo no se les permitió aumentar el número de trabajadores de 0 a 1, a pesar de que la interfaz de usuario parecía mostrar que!

 32
Author: justingordon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-23 22:48:45

A partir de sidekiq versión 3.0 hay un paso adicional, ejecutar heroku config:set REDIS_PROVIDER=REDISTOGO_URL en la consola.

Aquí está 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'

He añadido el siguiente archivo, config/initializers/redis.rb:

uri = ENV["REDISTOGO_URL"] || "redis://localhost:6379/"
REDIS = Redis.new(:url => uri)

Aquí está el enlace a los documentos de sidekiq.

 15
Author: Steve,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-03 21:58:31

Parece que ya casi estás ahí. Puede ser que solo necesite establecer REDISTOGO_URL en la configuración de heroku?

heroku config 

¿Debería mostrarte el valor redistogo?

Si copia eso a REDISTOGO_URL entonces sidekiq debería funcionar?

heroku config:add REDISTOGO_URL=<redistogo value>

Edit: Sidekiq utilizará 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 está utilizando OpenRedis u otros proveedores de Redis, debe agregar REDISTOGO_URL para Sidekiq

 1
Author: gef,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-19 11:36:30

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
 1
Author: superluminary,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-19 16:10:21

Lo que descubrí es que tienes que escalar el proceso manualmente de la siguiente manera:

heroku ps:scale worker+1

No tiene sentido ya que mi Procfile dijo:

web: bundle exec....
worker: bundle exec sidekiq

...y uno esperaría que Heroku iniciara al trabajador automáticamente. Al final no tuve que escalar el proceso web...

Además, es posible que tenga problemas con esta línea: trabajador: bundle exec sidekiq

Agregar banderas para la concurrencia:

worker: bundle exec sidekiq -c 5 -v
 1
Author: luigi7up,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-06 12:43:20