ruby on rails - sidekiq no genera el archivo sidekiq.pid en heroku, usándolo con Redistogo
ruby-on-rails (3)
He estado luchando durante dos días para conseguir trabajos de sidekiq en el entorno de producción de heroku. He leído toda la documentación disponible sobre problemas similares, y aún no he podido producir una solución de trabajo, ¡realmente me gustaría algo de ayuda!
Después de implementarlo en heroku, mi aplicación se bloquea y aparece el siguiente seguimiento de la pila de errores:
2014-09-23T23:38:40.905093+00:00 app[worker.1]: No such file or directory @ rb_sysopen - /app/tmp/pids/sidekiq.pid
2014-09-23T23:38:40.905122+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.1.0/bin/sidekiq:23:in `<main>''
2014-09-23T23:38:40.905119+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.1.0/gems/sidekiq-3.2.5/bin/sidekiq:7:in `<top (required)>''
2014-09-23T23:38:40.905117+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.1.0/gems/sidekiq-3.2.5/lib/sidekiq/cli.rb:347:in `write_pid''
2014-09-23T23:38:40.905115+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.1.0/gems/sidekiq-3.2.5/lib/sidekiq/cli.rb:347:in `open''
2014-09-23T23:38:40.905121+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.1.0/bin/sidekiq:23:in `load''
2014-09-23T23:38:40.905118+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.1.0/gems/sidekiq-3.2.5/lib/sidekiq/cli.rb:41:in `parse''
2014-09-23T23:38:40.905114+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.1.0/gems/sidekiq-3.2.5/lib/sidekiq/cli.rb:347:in `initialize''
2014-09-23T23:38:39.588001+00:00 heroku[worker.1]: State changed from starting to up
Primero, sidekiq está funcionando correctamente en mi máquina local. Estoy usando el REDISTOGO de heroku para el redis, en la producción local, los sidekiq han sido apuntados al REDISTOGO correctamente y funcionando bien.
Segundo, de acuerdo con el seguimiento de la pila, especialmente esta línea, No such file or directory @ rb_sysopen - /app/tmp/pids/sidekiq.pid
; me lleva a pensar que, por alguna razón, el archivo sidekiq.pid
no se genera correctamente cuando se ejecuta en heroku. En el entorno local, el archivo sidekiq.pid
se genera cada vez que inicio la aplicación en el directorio app/tmp/pids/
, y asigna un número pid
diferente cada vez. Supongo que cuando se ejecuta en heroku, sidekiq
intentó leer este archivo pero no pudo encontrarlo.
Aquí está el contenido en mi Procfile
:
web: bundle exec rails server
worker: bundle exec sidekiq -C config/sidekiq.yml
Aquí está el contenido en mi config/sidekiq.yml
---
:verbose: true
:pidfile: ./tmp/pids/sidekiq.pid
:concurrency: 25
# Set timeout to 8 on Heroku, longer if you manage your own systems.
:timeout: 8
:queues:
- carrierwave
Aquí está el contenido en mi sidekiq.rb
Sidekiq.configure_server do |config|
config.redis = { :url => ENV[''REDISTOGO_URL''], :namespace => "mynamespece"}
end
Sidekiq.configure_client do |config|
config.redis = { :url => ENV[''REDISTOGO_URL''], :namespace => "mynamespece"}
end
Actualización 1
:
Estoy usando carrierwave
y carrierwave-backgrounder
en sincronización con sidekiq
.
Este problema ha sido resuelto por las siguientes acciones:
1) Gracias a @MikePerham por indicarme la dirección correcta, primero sidekiq.yml
esta línea en mi archivo sidekiq.yml
:
:pidfile: ./tmp/pids/sidekiq.pid
2) Luego, en mi Procfile
, tuve que usar la siguiente línea para reemplazar el origen:
web: bundle exec rails server -p $PORT
worker: bundle exec sidekiq -C config/sidekiq.yml
Ahora sidekiq está funcionando correctamente con redistogo en heroku para mí.
Me pareció útil agregar el directorio al repositorio y volver a implementar la aplicación.
mkdir -p tmp/pids
touch tmp/pids/.gitkeep
git add -f tmp/pids/.gitkeep
git commit -m ''Keep tmp/pids directory in repo''
Espero que esto ayude.
Se solucionó al hacer el directorio pids
en el directorio tmp
en la raíz del proyecto