Подтвердить что ты не робот

Отправка сообщений электронной почты через Resque

Я пытаюсь отправить сообщения Devise через Resque.

Регулярные письма отправляются через Resque просто отлично. И электронные письма 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/[email protected]/gems/devise-1.4.9/lib/devise/mailers/helpers.rb:20:in `devise_mail'

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

4b9b3361

Ответ 1

Простым способом является использование devise-async gem.

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

# Gemfile
gem "devise-async"

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

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

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

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

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

Ответ 2

Обновление: вам не нужно делать это с помощью 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, поэтому вы можете использовать этот модуль в других почтовых программах.

конфигурации/Инициализаторы/devise.rb:

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

Перенесите свои виды разработки из приложения/views/devize/mailer/в app/views/devise_resque_mailer/