2010-12-11 23 views
6

Tôi đang sử dụng đá quý delayed_job đây: https://github.com/collectiveidea/delayed_jobRails 3 - Delayed_Job (collectiveidea), cố gắng trì hoãn bưu phẩm - Lỗi: NoMethodError (phương pháp xác định 'chậm trễ' cho UserMailer: Class)

Tôi đã điều sau đây trong một quan sát viên:

UserMailer.delay.msg_notification(record) 

Trong user_mailer.rb

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

Nhưng lỗi này với:

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

Bất kỳ ý tưởng nào? cảm ơn

+0

bạn đã kiểm tra lại để đảm bảo rằng đá quý nằm trong tệp gem của bạn và bạn đã chạy cài đặt gói. Bạn cũng đã tạo các bảng phụ trợ mà gem yêu cầu như đã nêu trong tài liệu chưa? –

Trả lời

4

Tôi đã gặp sự cố như thế này trên ứng dụng Rails của chúng tôi (2.3.8, nhưng vấn đề vẫn giống nhau). Về cơ bản, có ba cách để trì hoãn một hành động:

  1. MyClass.delay.foo(arg)
  2. Đưa handle_asynchronously :foo trong định nghĩa lớp của bạn sau khi định nghĩa của foo
  3. MyClass.send_later(:foo, arg)

Đối với bất cứ lý do nào, # 3 là chỉ có hình thức hoạt động nhất quán trên tất cả các máy phát triển của chúng tôi. # 1 đã chết trên máy chủ phát triển của chúng tôi (Ubuntu); # 2 trên Mac của nhà thiết kế của chúng tôi. Nhưng # 3 là tốt.

Hy vọng điều đó sẽ hữu ích!

+0

[DEPRECATION] 'object.send_later (: method)' không được chấp nhận. Sử dụng 'object.delay.method' nhưng nó vẫn không hoạt động với tôi –

+0

@Lucas Tôi chỉ thử với Rails 2.3.8, vì vậy những gì bạn thấy có thể là một điều Rails 3. Hoặc bạn có thể thử một nhánh khác của delay_job - có nhiều chùm (chúng tôi sử dụng CollectiveIdea's, tôi nghĩ). Hoặc nó có thể không được chấp nhận trên bảng - đó sẽ là tin tức khủng khiếp, vì 'send_later' là người duy nhất liên tục làm việc! Có lẽ một báo cáo lỗi là theo thứ tự ... –

2

Đồng thời kiểm tra xem bạn đã khởi động lại máy chủ của mình sau khi cài đặt gói chưa. Đó có thể là vấn đề quá ...

Các vấn đề liên quan