2011-11-14 11 views
12

Próbuję wysłać e-maile Devise przez Resque.Wysyłanie Devise e-maili za pośrednictwem Resque

Regularne wiadomości e-mail są wysyłane przez Resque w porządku. I e-maile Devise są wysyłane w porządku, ale nie wysyłaj e-maili przez Resque. Otrzymuję komunikat "Nie można znaleźć prawidłowego mapowania", co oznacza, że ​​moje nadpisania pomocnicze nie zostaną pobrane.

Obserwuję tę http://shaker.4-dogs.biz/2011/08/06/using-resque-to-send-mail-for-devise/

Najdziwniejsze jest to, że do debugowania go używam lokalną kopię opracowania i dodawanie punktów przerwania w „initialize_from_record” w opracowanie, które dostanie po prostu użyć sam opracować . Ale kiedy wysłać e-maile opracować poprzez Resque Wartości graniczne nie oberwać:

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

config.mailer = "ResqueMailer" 

I Resque zamiast przedstawia opakowaną drogę klejnot i nie mój lokalnego źródła, takie jak:

/Users/mm/.rvm/gems/[email protected]/gems/devise-1.4.9/lib/devise/mailers/helpers.rb:20:in `devise_mail' 

jakiś pomysł dlaczego nie używa mojego lokalnego źródła klejnotów I/LUB, jak zmusić Resque'a do wysłania moich e-maili z Devise?

+0

Wygląda na to, że został naprawiony przy użyciu najnowszej wersji resque_mailer (2.2.3). – tee

Odpowiedz

4

Aktualizacja: nie trzeba to zrobić z resque_mailer> = 2.2.3

Plaster małpa na https://github.com/devton/resqued_devise_mailer nie działa, ponieważ wysyła pełną modelu jako argument do Resque, który zakończy się marshaling obiektu i jest mile widziana (patrz Persistence na https://github.com/defunkt/resque).

Oto co pracował dla mnie:

Użyj gem resque_mailer: https://github.com/zapnap/resque_mailer

gem 'resque_mailer' 

Dodaj lib/devise_resque_mailer.rb: patrz https://gist.github.com/1375726

który tworzy nową klasę DeviseResqueMailer tego nie zmieni wszelkie istniejące zachowanie w Resque :: Mailer, aby można było użyć tego modułu w innych programach pocztowych.

config/inicjalizatory/devise.rb:

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

Przenieś swoje poglądy opracować z app/views/opracowania/mailer/APP/views/devise_resque_mailer/

+1

Powyższy hack nie jest konieczny w najnowszej wersji resque_mailer (2.2.3). – tee

+0

co to jest "hack" powyżej? Cała odpowiedź lub konkretna część odpowiedzi? –

+0

Cała odpowiedź brzmi: hack. resque_mailer powinien działać poprawnie od wersji 2.2.3+. – tee

8

Łatwym sposobem jest użycie devise-async klejnot.

Dodaj gem do Gemfile

# Gemfile 
gem "devise-async" 

Konfiguracja opracować do korzystania z programu pocztowego proxy.

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

[Opcjonalnie] I na koniec powiedz DeviseAsync, aby używał Resque do umieszczania w kolejce e-maili.

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

Klejnot obsługuje także Sidekiq i Delayed :: Job.

+0

Czy ten klejnot przechodzi retransmiterię lub czy jest to zupełnie inna kolejka? –

Powiązane problemy