I\'ve been trying to figure out how to send delayed mail using delayed_job with rails 3. I\'ve tried pretty much every combination of feasible possibilities I can think of -
I found in Rails 3 with mongoid that removing the handle_asynchronously line gets it to work. I was having all kinds of problems, and it appeared that delayed_job wasn't recognizing any objects within my Emailer class. Removing handle_asynchronously fixed it.
I agree with andrea - I was having this exact problem, and after switching my local development database from sqlite to mysql, I can run code like
Emailer.delay({:run_at => 5.minutes.from_now}).welcome(@user)
and it sends the email 5 minutes later. Note that you might need a bigger delay than five minutes (in case of time zone weirdness) to be sure it is working.
Both using the .delay
method and setting handle_asynchronously :test_mail
is redundant. Try removing the .delay
method from your code. use simply
Testmailer.test_mail # without .deliver due to a delayed_job issue
However, I ran some test on your configuration and when using sqlite, run_at
is simply ignored (do not know why), but when using mysql2 everything works fine.