Próbuję opóźnić wysłanie wiadomości e-mail z powiadomieniem do użytkowników po zarejestrowaniu się w mojej aplikacji. E-maile są wysyłane za pomocą ActionMailer
, którą nazywam InitMailer
. Sposób, w jaki próbuję opóźnić pracę, polega na użyciu delayed_job
collectiveidei https://github.com/collectiveidea/delayed_job. Aby to zrobić, można zobaczyć, że mogę określić handle_asynchronously
po zdefiniowaniu metody initial_email
:Jak korzystać z delayed_job, aby Rails 3.0 ActionMailer działał asynchronicznie? Napotkanie 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
Jednak wystąpienia błędu argument w moim pliku dziennika "delayed_job.log"
:
Class#initial_email failed with ArgumentError: wrong number of arguments (1 for 0) - 5
failed attempts
Dla twojej informacji, e-mail wysłany w kontrolerze przy użyciu linii:
@user = InitUser.new(params[:init_user])
InitMailer.delay.initial_email(@user)
Dodatkowo, po skonfigurowaniu kodu bez opóźnień, e-maile w wysłano bez problemu (z wyjątkiem tego, że spowolniło to moją aplikację oczekującą na serwery Gmaila)
Gdzie powoduje błędy tutaj? Jak mogę poprawnie wysłać przesyłkę z opóźnieniem?
Dziękujemy! To jest odpowiedź na moje kłopoty. Chciałbym, żebyśmy pracowali z kimś takim jak ty! – geb2011
Awesome. Właśnie zmarnowałem 2 dni próbując to zrozumieć (również był problem z przechwytywaczem powodującym awarię, a Gmail nie chciał akceptować wiadomości e-mail z mojego środowiska programistycznego). – Clay
Używam Mandrill do wysyłania e-maili zamiast Gmaila, nawet w środowisku programistycznym. – Dean