ruby-on-rails heroku pid sidekiq redistogo

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