rails perform password now ruby-on-rails heroku sidekiq

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!