Devise Async provides an easy way to configure Devise to send its emails asynchronously using your preferred queuing backend.
Add this line to your application's Gemfile:
And then execute:
Or install it yourself as:
$ gem install devise-async
:async to the
devise call in your model:
class User < ActiveRecord::Base devise :database_authenticatable, :async, :confirmable # etc ... end
Set your queuing backend by creating
# Supported options: :resque, :sidekiq, :delayed_job, :queue_classic, :torquebox, :backburner, :que, :sucker_punch Devise::Async.backend = :resque
Tip: it defaults to Resque. You don't need to create the initializer if using it.
Enabling via config
The gem can be enabled/disabled easily via config, for example based on environment.
# config/initializers/devise_async.rb Devise::Async.enabled = true # | false
Custom mailer class
Devise.mailer at will and
devise-async will honor it.
Upgrade note: if you're upgrading from any version < 0.6 and getting errors
trying to set
Devise::Async.mailer just use
Let you specify a custom queue where to enqueue your background Devise jobs. Defaults to :mailer.
# config/initializers/devise_async.rb Devise::Async.queue = :my_custom_queue
You can specify a custom priority for created background jobs in Devise or Backburner. If no value is specified, jobs will be enqueued with whatever default priority is configured in Devise or Backburner.
# config/initializers/devise_async.rb Devise::Async.priority = 10
Setup via block
To avoid repeating
Devise::Async in the initializer file you can use the block syntax
similar to what
# config/initializers/devise_async.rb Devise::Async.setup do |config| config.enabled = true config.backend = :resque config.queue = :my_custom_queue end
If you are using Sidekiq and your jobs are enqueued but not processed you might need to set a queue explicitly:
# config/initializers/devise_async.rb Devise::Async.setup do |config| config.backend = :sidekiq config.queue = :default end
Be aware that since version 0.3.0 devise-async enqueues the background job in active
after_commit hook. If you're using rspec's
use_transactional_fixtures the jobs
might not be enqueued as you'd expect.
More details in this stackoverflow thread.
Devise < 2.2
Older versions of Devise are supported in the devise_2_1 branch and in the 0.5 series of devise-async.
Please refer to that branch README for further info.
Devise >= 4.0
The current state of this gem does not support Devise 4.0 and up. Have a look into the Github issue addressing this. If you are in need for a solution to send Devise messages delayed a switch to ActiveJob is strongly advised.
- Fork it
- Create your feature branch (
git checkout -b my-new-feature)
- Commit your changes (
git commit -am 'Added some feature')
- Push to the branch (
git push origin my-new-feature)
- Create new Pull Request
Released under the MIT License. See the LICENSE file for further details.