无法识别实例变量



我正在使用resque发送电子邮件。电子邮件不发送,如果我的邮件模板包含任何引用实例变量。激活邮件在我使用resque将其移到后台作业之前正常工作。

<标题> users_controller.rb h1> send_activation_email.rb h1> user_mailer.rb h1> account_activation.text.erb h1> 求web中记录的错误是:无路由匹配{:action=>"edit",:controller=>"account_activation ",:email=>"user5@domain.com",:id=>nil}缺少所需密钥:[:id]

当链接被删除时,以下将发送…

<标题> account_activation.text.erb h1> 由正确:
edit_account_activation GET    /account_activations/:id/edit(.:format)                             account_activations#edit

只是为了确保,改变你的user_mailer.rb稍微使用@new_user实例变量来检索它的电子邮件在account_activation方法

class UserMailer < ApplicationMailer
  def account_activation(user)
    @new_user = user
    mail to: @new_user.email, subject: "Account activation"
  end
end

config/environments/development.rb文件中添加:

config.action_mailer.raise_delivery_errors = true

这将通知您,如果有任何错误的电子邮件发送。您将能够检查您的开发日志。

试试这两件事,让我知道更新。我收到你的反馈后会更新我的答案。

更新

你说:The activation mailer worked correctly before I moved it to a background job using resque.是什么意思?你在生产模式下测试了吗?还是处于开发模式?在开发模式下,我认为不会发送实际的电子邮件,但您可以预览它(在Rails 4.1.x中)。当您进入生产环境时,您将需要设置一个外部服务器来发送实际的电子邮件。

然而,

添加:

config.action_mailer.raise_delivery_errors = true
按照我上面的建议,在你的config/environments/development.rb file中的

,然后你就可以看到电子邮件发送中是否有任何错误。然后,你可以进行下一步。

问题是实例变量从基于符号的键转换为基于字符串的键。在我的邮件视图中,我通过符号获取值,因此可以通过字符串获取值,也可以调用hash.symbolize_keys!转换回符号键。

我找到的解决方案来自:https://github.com/zapnap/resque_mailer/issues/23

最新更新