2011-11-14 2 views
12

Sto tentando di inviare email Devise tramite Resque.Invio di email Devise tramite Resque

Le e-mail regolari vengono inviate correttamente tramite Resque. E le e-mail Devise vengono inviate correttamente, ma non le e-mail Devise tramite Resque. Ricevo "Impossibile trovare una mappatura valida" che implica che i miei override di supporto non vengano rilevati.

che sto seguendo questo http://shaker.4-dogs.biz/2011/08/06/using-resque-to-send-mail-for-devise/

La cosa strana è che per eseguire il debug sto utilizzando una copia locale del Devise e l'aggiunta di punti di interruzione nel 'initialize_from_record' in Devise, che viene colpito quando mi basta usare Devise da solo . Ma quando invio le email Devise attraverso resque i punti di interruzione non vengono colpiti:

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

config.mailer = "ResqueMailer" 

E resque mostra invece un percorso gioiello confezionato e non la mia fonte locale, come:

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

Qualsiasi idea del perché non sta usando la mia fonte gemma locale E/O come ottenere Resque per inviare le mie email Devise?

+0

Questo sembra essere risolto con l'ultima versione di resque_mailer (2.2.3). – tee

risposta

4

Update: non è necessario fare questo con resque_mailer> = 2.2.3

La patch scimmia a https://github.com/devton/resqued_devise_mailer non ha funzionato dal momento che invia il modello completo come argomento per Resque, che finirà effettuare il marshalling dell'oggetto e si disapprova (vedere Persistenza su https://github.com/defunkt/resque).

Ecco cosa ha funzionato per me:

Utilizzare la gemma resque_mailer: https://github.com/zapnap/resque_mailer

gem 'resque_mailer' 

Aggiungi lib/devise_resque_mailer.rb: vedi https://gist.github.com/1375726

che crea una nuova classe DeviseResqueMailer che non cambierà qualsiasi comportamento esistente in Resque :: Mailer, quindi puoi usare quel modulo in altri mailer.

config/inizializzatori/devise.rb:

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

Spostare le vostre opinioni testamentaria da app/views/ideare/mailer/a app/views/devise_resque_mailer/

+1

La modifica precedente non è necessaria con l'ultima versione di resque_mailer (2.2.3). – tee

+0

qual è il "trucco" sopra? L'intera risposta o una parte specifica della risposta? –

+0

L'intera risposta è l'hack. resque_mailer dovrebbe funzionare senza problemi a partire dalla 2.2.3+. – tee

8

Un modo semplice è quello di utilizzare il devise-async gemma.

Aggiungere la gemma al Gemfile

# Gemfile 
gem "devise-async" 

Configurare Devise per usare il mailer proxy.

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

[opzionale] E infine dire DeviseAsync utilizzare Resque per accodare i messaggi di posta elettronica.

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

La gemma supporta anche Sidekiq e ritardata :: lavoro.

+0

Questa gemma passa attraverso il resque mailer o è una coda completamente diversa? –