Tôi đang cố gắng trì hoãn một email thông báo được gửi tới người dùng khi đăng ký ứng dụng của tôi. Các email được gửi bằng cách sử dụng một số ActionMailer
mà tôi gọi là InitMailer
. Cách tôi đang cố trì hoãn công việc là sử dụng số delayed_job
https://github.com/collectiveidea/delayed_job của tập đoàn. Để thực hiện điều này, bạn có thể thấy rằng tôi chỉ định handle_asynchronously
sau khi xác định phương pháp initial_email
:Làm thế nào để sử dụng delay_job để làm cho Rails 3.0 ActionMailer chạy không đồng bộ? Gặp ArgumentErrors
class InitMailer < ActionMailer::Base
default :from => "[email protected]"
def initial_email(user)
@user = user
@url = "http://www.blahblahblah.com"
mail(:to => user.email,
:subject => "Welcome to my website!"
)
end
handle_asynchronously :initial_email
end
Tuy nhiên, tôi gặp phải một lỗi lập luận trong tập tin đăng nhập của tôi "delayed_job.log"
:
Class#initial_email failed with ArgumentError: wrong number of arguments (1 for 0) - 5
failed attempts
Để biết thông tin của bạn, email là được gửi trong bộ điều khiển bằng cách sử dụng dòng:
@user = InitUser.new(params[:init_user])
InitMailer.delay.initial_email(@user)
Ngoài ra, khi tôi thiết lập mã của mình mà không bị trì hoãn, các email ere được gửi ra mà không có vấn đề (ngoại trừ thực tế là nó làm chậm ứng dụng của tôi chờ đợi cho các máy chủ gmail)
Trường hợp gây ra lỗi ở đây? Làm thế nào tôi có thể nhận được thư bị trì hoãn để gửi đúng cách?
Cảm ơn bạn! Đây là câu trả lời cho những rắc rối của tôi. Ước gì tôi đã làm việc với một người như yoU! – geb2011
Tuyệt vời. Tôi chỉ lãng phí 2 ngày cố gắng để con số này ra (cũng là một vấn đề với một kẻ đánh chặn gây ra một thất bại và Gmail không muốn chấp nhận email từ môi trường phát triển của tôi). – Clay
Tôi muốn sử dụng Mandrill để gửi email thay vì Gmail, ngay cả đối với môi trường phát triển. – Dean