2010-12-11 13 views
6

estoy usando la gema delayed_job aquí: https://github.com/collectiveidea/delayed_jobCarriles 3 - Delayed_Job (collectiveidea), tratando de Mailers Delay - Error: NoMethodError (método no definido `delay' para UserMailer: Clase)

Tengo el siguiente en una observador:

UserMailer.delay.msg_notification(record) 

En user_mailer.rb

class UserMailer < ActionMailer::Base 
... 
def msg_notification(record) 
    mail( 
      :to => "#{record.user.email}", 
      :subject => "Notification" 
     ) 
    end 
.. 
end 

Pero esta errores con:

NoMethodError (undefined method `delay' for UserMailer:Class): 

¿Alguna idea? gracias

+0

haz comprobado dos veces para asegurarte de que la gema está en tu archivo gema y has ejecutado la instalación del paquete. ¿Ya ha creado las tablas de back-end que la gema requiere como se describe en la documentación? –

Respuesta

4

He visto un problema como este en nuestra aplicación Rails (2.3.8, pero el problema parece ser el mismo). Básicamente, hay tres maneras de retrasar una acción:

  1. MyClass.delay.foo(arg)
  2. Poner handle_asynchronously :foo en su definición de clase después de la definición de foo
  3. MyClass.send_later(:foo, arg)

Por alguna razón, # 3 fue el única forma que funcionó consistentemente en todas nuestras máquinas de desarrollo. # 1 murió en nuestro servidor de desarrollo (Ubuntu); # 2 en la Mac de nuestro diseñador. Pero el # 3 estuvo bien.

Espero que ayude!

+0

[DEPRECATION] 'object.send_later (: method)' está en desuso. Use 'object.delay.method' pero aún no funciona para mí –

+0

@Lucas Solo he intentado esto con Rails 2.3.8, entonces lo que está viendo podría ser algo de Rails 3. O podría probar una bifurcación diferente de la tarea demorada: hay racimos (utilizo CollectiveIdea, creo). O podría ser obsoleto en todos los ámbitos, lo que sería una noticia terrible, porque 'send_later' fue el único que funcionó constantemente. Tal vez un informe de error está en orden ... –

2

También compruebe si ha reiniciado su servidor después de la instalación del paquete. Eso también podría ser un problema ...