2011-11-14 41 views
12

Tôi đang cố gắng gửi email Devise thông qua Resque.Gửi email phát sinh thông qua Resque

Email thông thường sẽ được gửi qua Resque tốt. Và Devise email được gửi tốt, nhưng không tìm ra email thông qua Resque. Tôi nhận được "Không thể tìm thấy một bản đồ hợp lệ" ngụ ý rằng phần ghi đè trợ giúp của tôi không được nhận.

tôi sau này http://shaker.4-dogs.biz/2011/08/06/using-resque-to-send-mail-for-devise/

Điều kỳ lạ là rằng để gỡ lỗi nó Tôi đang sử dụng một bản sao cục bộ lập mưu và thêm breakpoint trong 'initialize_from_record' trong lập mưu, mà được nhấn khi tôi chỉ cần sử dụng một mình lập mưu . Nhưng khi tôi gửi email lập mưu thông qua resque các breakpoint không được nhấn:

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

config.mailer = "ResqueMailer" 

Và resque thay vì thấy một con đường đá quý đóng gói và không nguồn địa phương của tôi như:

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

Bất cứ ý tưởng tại sao nó không sử dụng nguồn đá quý địa phương của tôi VÀ/HOẶC làm thế nào để có được Resque để gửi email Devise của tôi?

+0

Điều này dường như được khắc phục bằng phiên bản mới nhất của resque_mailer (2.2.3). – tee

Trả lời

4

Cập nhật: bạn không cần phải làm điều này với resque_mailer> = 2.2.3

Các miếng vá khỉ tại https://github.com/devton/resqued_devise_mailer đã không làm việc vì nó sẽ gửi toàn bộ mô hình như một tham số để Resque, mà sẽ kết thúc marshaling đối tượng và được cau mày (xem Persistence trên https://github.com/defunkt/resque).

Đây là những gì làm việc cho tôi:

Sử dụng đá quý resque_mailer: https://github.com/zapnap/resque_mailer

gem 'resque_mailer' 

Thêm lib/devise_resque_mailer.rb: xem https://gist.github.com/1375726

Điều đó tạo ra một lớp DeviseResqueMailer mới sẽ không thay đổi mọi hành vi hiện có trong Resque :: Mailer, vì vậy bạn có thể sử dụng mô-đun đó trong các trình gửi thư khác.

config/initializers/devise.rb:

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

Di chuyển quan điểm devise của bạn từ app/views/đưa ra/bưu phẩm/to app/views/devise_resque_mailer/

+1

Việc hack ở trên là không cần thiết với phiên bản mới nhất của resque_mailer (2.2.3). – tee

+0

"hack" ở trên là gì? Toàn bộ câu trả lời hoặc một phần cụ thể của câu trả lời? –

+0

Toàn bộ câu trả lời là hack. resque_mailer sẽ hoạt động ra khỏi hộp kể từ 2.2.3 trở lên. – tee

8

Một cách dễ dàng là sử dụng devise-async đá quý.

Thêm đá quý để Gemfile bạn

# Gemfile 
gem "devise-async" 

Configure lập mưu để sử dụng các bưu phẩm proxy.

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

[Tùy chọn] Và cuối cùng yêu cầu DeviseAsync sử dụng Resque để enqueue email.

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

Đá quý cũng hỗ trợ Sidekiq và Delayed :: Job.

+0

Viên ngọc này có đi qua bưu phẩm phục hồi hay là một hàng đợi hoàn toàn khác? –

Các vấn đề liên quan