2011-07-10 9 views
16

He añadido la gema delayed_job a mi Gemfile e instalado correctamente, pero cuando trato de ejecutar la siguiente línea:constante sin inicializar retardada :: Trabajo

Delayed::Job.enqueue do_it(), 0, 1.minutes.from_now.getutc 

me sale el error 'constante sin inicializar retardada :: Trabajo '

¿Alguien puede explicar lo que tengo que hacer aquí? Intenté ejecutar 'trabajos de rake: trabajo' de antemano, pero también devuelve el error 'Delayed :: Job' constante no inicializado. Además, agregué "require 'delayyed_job'" al archivo (application.rb) sin mucha suerte.

Respuesta

12

¿Has seguido las instrucciones de instalación en el archivo README? https://github.com/collectiveidea/delayed_job

Agregue esto a su Gemfile:

gem 'delayed_job_active_record' 

y luego ejecutar esto en la consola:

$ rails generate delayed_job:active_record 
$ rake db:migrate 

Es necesario crear la tabla empleos retraso en la base de datos (esto supone que eres usando el registro activo).

Para Rails 3, todo lo que necesita hacer es incluirlo en el gemfile, ejecutar el código anterior para crear la tabla y migrar la base de datos, luego reinicie su servidor y ¡listo!

+1

También asegúrese de que usted agrega 'app/modelos/delayed_job.rb' también. No es necesario definir mucho, solo la clase en sí misma: 'clase DelayedJob sorens

+0

@sorens ¿puede confirmar que es un paso necesario? –

+0

@just__matt Creo que sí, pero no lo he confirmado. Comience un nuevo proyecto de rieles, agregue la gema delayed_job, omita el modelo y vea. – sorens

1

tuve problemas hace un tiempo con el mismo problema. Estaba siguiendo el screencast de Ryan Bates en Delayed_job y recibí el mismo error 'constante no inicializada Retrasada :: Trabajo'. En el screencast, ryan crea un archivo llamado mailing_job.rb (ubicado en la carpeta lib) con el método de ejecución retrayed_job dentro, que le permite usar el método en cola. Después de hacer algunas investigaciones me encontré con que los carriles 3 no se carga automáticamente los archivos de la carpeta lib en su aplicación (no del todo seguro)

probar este
En su controlador en el que utiliza esto:.

"Delayed::Job.enqueue do_it(), 0, 1.minutes.from_now.getutc" 

Intente solicitar el archivo de esta manera.

require 'mailing_job' 
class AssetsController < ApplicationController 
    def some_method 
     Delayed::Job.enqueue do_it(), 0, 1.minutes.from_now.getutc 
    end 
end 
18

Si Se actualizó a la versión de retraso de trabajo> = 3, tendrá que agregar esto (suponiendo que esté usando ActiveRecord):

# Gemfile 
gem 'delayed_job_active_record' 
+1

Muy útil: tuve ese problema. Completar a un lado, pero para salvar a alguien más, también tuve que actualizar el uso de Paperclip de 'gem 'aws-s3'' a' gem' aws-sdk'' –

+2

Ver "Actualización de 2.x a 3.0.0 en Active Record "aquí: https://github.com/collectiveidea/delayed_job – Cam

+0

Esto corrigió mi problema al pasar a una pila de cedros en Heroku junto con el comentario de Peter sobre aws. ¡Gracias! – jbg

0

Posibilidad de cambio de versión: si salta de la versión 2.1.xa la 3.x de la gema a través de un paquete no bloqueado, es posible que tenga un problema similar.

7

Uso el trabajo retrasado dentro de un motor (por lo que la gema se especifica en .gemspec en lugar de Gemfile) y estaba obteniendo el mismo error.Me di cuenta que podía resolver el problema mediante el uso de:

require 'delayed_job_active_record' # fixes problem 

en lugar de

require 'delayed_job'    # doesn't 
+0

Esta respuesta ya se ha hecho dos veces en esta pregunta. –

+2

No, no tiene. El punto clave es que en un motor tuve que usar específicamente una declaración de requerimiento. Las otras respuestas se refieren a las aplicaciones estándar de rieles, donde el uso de "gem 'delayed_job_active_record'" en el Gemfile fue suficiente. Este no es el caso para un motor donde la gema está definida en gemspec, y luego necesita usar una declaración de requerimiento donde se necesita la gema en su código. – ReggieB

+0

Sí, ¡esto requiere una declaración! Gracias. –

Cuestiones relacionadas