DelayedJob no parece salida si existe es algo malo:
clases récord
1- no activos necesitan ser requerida y inicializado:
Cómo: Crear una estafa archivo fig/inicializadores/load_classes_for_dj.rb Añadir a que las líneas:
require 'lib/libtest/delayed_test.rb'
DelayedTest
Tenga en cuenta que si tiene '# {config.root}/lib/libtest' en config.autoload_paths en config/application.rb, se no necesita hacer el requerimiento.
Fuente: Rails Delayed Job & Library Class
2- Las clases que implementan el módulo Singleton no funcionará llamando: SingletonClass.instance.delay.sayhello
Con el fin de arreglar eso, haga lo siguiente:
class SingletonClass
include Singleton
# create a class method that does the call for you
def self.delayed_sayhello
SingletonClass.instance.sayhello
end
def sayhello
# this is how you can actually write to delayed_job.log
# https://stackoverflow.com/questions/9507765/delayed-job-not-logging
Delayed::Worker.logger.add(Logger::INFO, "hello there")
end
end
con el fin de llamar al método de la clase retrasada, haga lo siguiente:
SingletonClass.delay.delayed_sayhello
Sí, estoy llamando a .delay en una clase aquí.Dado que las clases en Ruby también son objetos, la llamada es válida aquí y me permite acceder al método de clase "delayed_sayhello"
3- No pase objetos ActiveRecord u otros objetos complejos a su llamada, sino que pase los identificadores, busque el los objetos de la base de datos en su método de retraso, y luego hacer su trabajo:
no hago:
DelayedClass.new.delay.do_some_processing_on_album Album.first
debe hacerse lo siguiente:
DelayedClass.new.delay.do_some_processing_on_album Album.first.id
y en el interior DelayedClass do_some_processing_on_album, hacer
a = Album.find_by_id id
Hubo un post StackOverflow sobre el que yo vi hace un tiempo - pero no estoy seguro :-)
4- Para finalizar, este es cómo hacer anuncios publicitarios (no llame al método de entrega):
Notifier.delay.signup(user_id)
Según 3, no pasan objeto del usuario sino más bien su identificación, hacer la búsqueda dentro de la meto de registro re.
Ahora, una vez que tenga la certeza de haber seguido las pautas anteriores, puede utilizar:
Delayed::Worker.logger.add(Logger::INFO, "hello")
Si todavía se enfrentan a problemas, sugiero usted analiza su problema:
una - Cree una nueva clase b- Asegúrese de tenerla incluida e inicializada según el paso 1 c- Agregue el registro desde el paso 4 e intente llamar a MyNewClass.new.delay para ver si funciona
espero que esto ayude a ustedes :-)
dónde le has puesto este código? Seguramente no solo en 'environment.rb' ...? – rfunduk
Aquí está todo: https://gist.github.com/833828 –
Esta debería ser la respuesta aceptada, ya que es la única solución que escribe los mensajes de estado del trabajo, todas las consultas SQL, así como los registros personalizados (utilizando 'logger.level', no' puts') a un archivo de registro dedicado a delayyed_job. – samvermette