ruby-on-rails - stop - rails job work
la cola de delayyed_job no se procesa en Heroku (4)
Estoy ejecutando una aplicación de Rails 3 con delayed_job. El problema que me he encontrado es que aunque la aplicación está agregando trabajos correctamente a la cola, nunca se procesan.
Mi clase
class User < ActiveRecord::Base
after_create :send_welcome_email
private
def send_welcome_email
UserMailer.delay.welcome_email(self)
end
end
Inspeccionando cosas a través de la consola de Rails puedo ver que hay trabajos en la cola. También puedo ver que ha habido 0 intentos para realizar los trabajos. Hacer girar a un trabajador de Heroku no hace que los trabajos sean procesados.
¿Algunas ideas?
¡Gracias!
Editar: Intentando borrar la cola de trabajos como se sugiere a continuación, ejecuté rake jobs:clear
y recibí el siguiente error
rake aborted!
uninitialized constant Rake::DSL
/app/.bundle/gems/ruby/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:8:in `<class:TaskLib>''
/app/.bundle/gems/ruby/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:6:in `<module:Rake>''
/app/.bundle/gems/ruby/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:3:in `<top (required)>''
/app/.bundle/gems/ruby/1.9.1/gems/rake-0.9.0/lib/rake/rdoctask.rb:20:in `<top (required)>''
/app/.bundle/gems/ruby/1.9.1/gems/railties-3.0.7/lib/rails/tasks/documentation.rake:1:in `<top (requ
ired)>''
/app/.bundle/gems/ruby/1.9.1/gems/railties-3.0.7/lib/rails/tasks.rb:15:in `block in <top (required)>
''
/app/.bundle/gems/ruby/1.9.1/gems/railties-3.0.7/lib/rails/tasks.rb:6:in `each''
/app/.bundle/gems/ruby/1.9.1/gems/railties-3.0.7/lib/rails/tasks.rb:6:in `<top (required)>''
/app/.bundle/gems/ruby/1.9.1/gems/railties-3.0.7/lib/rails/application.rb:214:in `initialize_tasks''
/app/.bundle/gems/ruby/1.9.1/gems/railties-3.0.7/lib/rails/application.rb:139:in `load_tasks''
/app/.bundle/gems/ruby/1.9.1/gems/railties-3.0.7/lib/rails/application.rb:77:in `method_missing''
/app/Rakefile:7:in `<top (required)>''
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2373:in `load''
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2373:in `raw_load_rakefile''
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2007:in `block in load_rakefile''
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2058:in `standard_exception_handling''
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2006:in `load_rakefile''
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:1991:in `run''
/usr/ruby1.9.2/bin/rake:31:in `<main>''
¿Está ejecutando el demonio delayed_job en el mismo entorno en el que se ejecuta la aplicación?
Intente trabajar los trabajos manualmente usando:
rake RAILS_ENV=development jobs:work
Si está ejecutando su aplicación en modo de producción, entonces necesita iniciar el demonio de demora_trabajo como sigue:
RAILS_ENV=production script/delayed_job start
Dos opciones para ti:
Estas dos gemas miran cola retrayed_jobs y ''contratan'' automáticamente a los trabajadores de segundo plano para procesar el hilo:
- Opción 1: https://github.com/michelson/hirefire (Esto es lo que estoy usando porque admite mongoid)
- Opción 2: esta rama de la tarea demorada desarrollada por un ingeniero heroku tiene una función de autoescala similar: https://github.com/pedro/delayed_job/tree/autoscaling
Buena suerte
Al final, el problema resultó ser un error en Rake 0.9.0. Como Rails depende de Rake, ejecutar la bundle install
después de este lanzamiento de Rake rompió mis trabajos retrasados.
La solución es agregar gem ''rake'', ''0.8.7''
a tu gemfile.
Más detalles se pueden encontrar a continuación...
Tweeter de DHH: http://twitter.com/dhh/status/71966528744071169
Discusión en el rastreador de problemas de rails_admin: https://github.com/sferik/rails_admin/issues/428
Es una posibilidad remota, pero asegúrese de estar usando la misma versión de Ruby en Heroku que en su máquina local. Tuve un problema con los trabajos retrasados en Heroku antes debido a esto.