Отправка писем Devise через Resque - PullRequest
12 голосов
/ 14 ноября 2011

Я пытаюсь отправить электронную почту Devise через Resque.

Обычные электронные письма отправляются через Resque просто отлично.И письма Devise отправляются просто отлично, но не письма Devise через Resque.Я получаю сообщение "Не удалось найти действительное сопоставление", которое означает, что мои переопределения помощника не собираются.

Я слежу за этим http://shaker.4 -dogs.biz / 2011/08/06/ using-resque-to-send-mail-for-devise /

Странно, что для отладки я использую локальную копию Devise и добавляю точки останова в 'initialize_from_record' в Devise, который получает удар, когда я использую только Devise.Но когда я отправляю электронные письма Devise через resque, точки останова не попадают:

class ResqueMailer < Devise::Mailer
  include Resque::Mailer
end

config.mailer = "ResqueMailer"

И вместо этого вместо resque отображается путь к упакованному гему, а не мой локальный источник, например:

/Users/mm/.rvm/gems/ruby-1.9.2-p290@evergreen/gems/devise-1.4.9/lib/devise/mailers/helpers.rb:20:in `devise_mail'

Любая идея, почему он не использует мой местный источник драгоценных камней И / ИЛИ как получить Resque для отправки моих писем Devise?

Ответы [ 2 ]

8 голосов
/ 19 мая 2012

Самый простой способ - использовать гем devise-async .

Добавьте драгоценный камень в свой Gemfile

# Gemfile
gem "devise-async"

Настройте Devise для использования прокси-почтовой программы.

# config/initializers/devise.rb
config.mailer = "Devise::Async::Proxy"

[Необязательно] И, наконец, скажите DeviseAsync, чтобы использовать Resque для постановки электронной почты в очередь.

# config/initializers/devise_async.rb
Devise::Async.backend = :resque

Драгоценный камень также поддерживает Sidekiq и Delayed :: Job.

4 голосов
/ 17 ноября 2011

Обновление: вам не нужно делать это с resque_mailer> = 2.2.3

Патч обезьяны на https://github.com/devton/resqued_devise_mailer не работает, так как он отправляетполная модель в качестве аргумента для Resque, которая в конечном итоге приведет к маршалированию объекта и осуждается (см. Постоянство на https://github.com/defunkt/resque).

Вот что сработало для меня:

Используйте гем resque_mailer: https://github.com/zapnap/resque_mailer

gem 'resque_mailer'

Добавить lib / devise_resque_mailer.rb: см. https://gist.github.com/1375726

, который создает новый класс DeviseResqueMailer, который не изменит никакого существующего поведения в Resque :: Mailer, поэтому вы можетеиспользуйте этот модуль в других почтовых программах.

config / initializers / devise.rb:

Devise.setup do |config|
  require 'devise_resque_mailer'
  config.mailer = "DeviseResqueMailer"

Переместите ваши представления devise из app / views / devise / mailer / в app / views / devise_resque_mailer /

...