通过Rescue发送设备电子邮件

时间:2011-11-14 17:32:24

标签: ruby-on-rails devise resque

我正在尝试通过Resque发送Devise电子邮件。

通过Resque发送普通电子邮件就好了。并且Devise电子邮件发送得很好,但不会通过Resque发送电子邮件。我得到“找不到有效的映射”,这意味着我的帮助程序覆盖不会被提取。

我正在关注此http://shaker.4-dogs.biz/2011/08/06/using-resque-to-send-mail-for-devise/

奇怪的是要调试它我正在使用Devise的本地副本并在Devise中的'initialize_from_record'中添加断点,当我仅使用Devise时会受到攻击。但是当我通过resque发送Devise电子邮件时,断点不会被击中:

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

config.mailer = "ResqueMailer"

而resque则显示一个打包的gem路径,而不是我的本地源,例如:

/Users/mm/.rvm/gems/ruby-1.9.2-p290@evergreen/gems/devise-1.4.9/lib/devise/mailers/helpers.rb:20:in `devise_mail'

知道为什么它没有使用我的本地gem源和/或如何让Resque发送我的Devise电子邮件?

2 个答案:

答案 0 :(得分:8)

一种简单的方法是使用devise-async gem。

将gem添加到您的Gemfile

# Gemfile
gem "devise-async"

配置Devise以使用代理邮件程序。

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

[可选]最后告诉DeviseAsync使用Resque将电子邮件排入队列。

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

gem还支持Sidekiq和Delayed :: Job。

答案 1 :(得分:4)

更新:您无需使用resque_mailer&gt; = 2.2.3

执行此操作

https://github.com/devton/resqued_devise_mailer处的猴子补丁不起作用,因为它将完整的模型作为参数发送给Resque,它最终将对该对象进行编组并且不受欢迎(参见https://github.com/defunkt/resque上的持久性)。 / p>

这对我有用:

使用resque_mailer gem: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"

将您的设计视图从app / views / devise / mailer /移至app / views / devise_resque_mailer /