【问题标题】:Sending Devise emails through Resque通过 Resque 发送设计电子邮件
【发布时间】:2011-12-28 20:43:03
【问题描述】:

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

正常的电子邮件可以通过 Resque 发送。并且设计电子邮件发送得很好,但不是通过 Resque 发送设计电子邮件。我得到“找不到有效的映射”,这意味着我的助手覆盖没有被拾取。

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

奇怪的是,为了调试它,我使用了 Devise 的本地副本,并在 Devise 的“initialize_from_record”中添加了断点,当我单独使用 Devise 时会遇到问题。但是当我通过 resque 发送设计电子邮件时,断点不会被命中:

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 电子邮件吗?

【问题讨论】:

  • 这似乎已用最新版本的 resque_mailer (2.2.3) 修复。

标签: ruby-on-rails devise resque


【解决方案1】:

更新:resque_mailer >= 2.2.3

不需要这样做

https://github.com/devton/resqued_devise_mailer 的猴子补丁不起作用,因为它将完整模型作为参数发送给 Resque,这将最终编组对象并令人不悦(请参阅 https://github.com/defunkt/resque 上的持久性)。

这对我有用:

使用 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 中的任何现有行为,因此您可以在其他邮件程序中使用该模块。

config/initializers/devise.rb:

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

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

【讨论】:

  • 最新版本的 resque_mailer (2.2.3) 不需要上述 hack。
  • 上面的“hack”是什么?整个答案还是答案的特定部分?
  • 整个答案就是破解。 resque_mailer 应该从 2.2.3+ 开始开箱即用。
  • 它应该只适用于开箱即用的设计吗?这是否意味着不需要devise-async gem?因为那不是我的发现。
  • 您需要devise-asyncresque_mailer 在设计中执行异步邮件。如果您使用resque_mailer,您可以忽略我的回答。 这个答案是一个不需要让resque_mailer工作的hack。
【解决方案2】:

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

将 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

gem 还支持 Sidekiq 和 Delayed::Job。

【讨论】:

  • 这个 gem 是通过 resque mailer 还是完全不同的队列?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-07
相关资源
最近更新 更多