Отправка сообщений электронной почты через 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?
Ответы
Ответ 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/