ResqueMailer
A gem plugin which allows messages prepared by ActionMailer to be delivered asynchronously. Assumes that you’re using Resque (github.com/defunkt/resque) for your background jobs.
Usage
Include Resque::Mailer in your ActionMailer subclass(es) like this:
class MyMailer < ActionMailer::Base
include Resque::Mailer
end
Or if you want to always use asynchronous delivery by default, create an initializer in your Rails project or piggyback on your load_resque.rb initializer:
class ActionMailer::Base
include Resque::Mailer
end
Now, when MyMailer.deliver_subject_email is called, an entry will be created in the job queue. Your Resque workers will be able to deliver this for you; the queue we’re using is imaginatively named mailer
. Just make sure your workers know about it and are loading your environment:
QUEUE=mailer rake environment resque:work
Note that you can still have mail delivered synchronously by using the bang method variant: MyMailer.deliver_subject_email!
Installation
Install it as a plugin or as a gem plugin.
script/plugin install git://github.com/zapnap/resque_mailer.git
# config/environment.rb
config.gem 'resque_mailer'
Testing
You don’t want to be sending actual emails in the test environment, so you can configure the environments that should be excluded like so:
# config/initializers/resque_mailer.rb
Resque::Mailer.excluded_environments = [:test, :cucumber]
Note on Patches / Pull Requests
-
Fork the project.
-
Make your feature addition or bug fix.
-
Add tests for it. This is important so I don’t break it in a future version unintentionally.
-
Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
-
Send me a pull request. Bonus points for topic branches.
Credits
This work is essentially a forked version of delayed_job_mailer (github.com/andersondias/delayed_job_mailer) by Anderson Dias (which in turn was inspired by Alexander Lang’s workling_mailer). Enhanced and modified to work with Resque by Nick Plante.