ruby-on-rails – 尝试通过Rails ActionMailer发送电子邮件导致`
我有一个继承自ApplicationMailer的Mailer类,后者继承自ActionMailer :: Base.
Ruby版本是ruby 2.4.1p111(2017-03-22修订版58053)[x86_64-darwin15].
Mailer类如下所示: class PurchaSEOrderStatusMailer < ApplicationMailer CONTACTS = { JC: ['me@example.com'],RM: ['me@example.com'] } def daily_report_email(facility) @facility = facility ingredient_items = LineItem.ingredient.by_facility(facility) @delivered_count = ingredient_items.by_date([7.days.ago,7.days.from_now]).delivered.count @partial_count = ingredient_items.by_date([7.days.ago,1.day.ago]).partial.count @late_count = ingredient_items.by_date([7.days.ago,1.day.ago]).late.count @expected_count = ingredient_items.by_date([Date.today,7.days.from_now]).expected.count mail(to: CONTACTS[facility.to_sym],subject: "#{facility} Daily Receipt Status - #{Date.today}") end end ApplicationMailer如下所示: # frozen_string_literal: true class ApplicationMailer < ActionMailer::Base default from: 'notify@example.com' def facility_email(facility) emails = Rails.application.config_for(:emails) (emails[facility] + emails["DEFAULT"]).flatten end end 该视图位于app / views / purchase_order_status_mailer / daily_report_email.html.erb. 当我打开我的Rails控制台并键入PurchaSEOrderStatusMailer.new.daily_report_email(‘JC’).deliver时,我看到以下错误: NoMethodError: undefined method `empty?' for nil:NilClass from /Users/me/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actionview-5.0.4/lib/action_view/lookup_context.rb:215:in `normalize_name' 我尝试使用相同的调用将格式块传递给对邮件助手的调用,如下所示: mail(to: CONTACTS[facility.to_sym],subject: "#{facility} Daily Receipt Status - #{Date.today}") do |format| format.text { render plain: "Hey!" } end 以上产生了以下响应,似乎代表了成功的电子邮件发送: Rendering text template Rendered text template (0.0ms) Sent mail to me@example.com (8.8ms) Date: Mon,25 Sep 2017 12:55:11 -0400 From: notify@example.com To: me@example.com Message-ID: <59c934efec401_1115b3fd69cc3f840917be@me-MBP.mail> Subject: JC Daily Receipt Status - 2017-09-25 Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hey! => #<Mail::Message:70191029273300,Multipart: false,Headers: <Date: Mon,25 Sep 2017 12:55:11 -0400>,<From: notify@example.com>,<To: ["me@example.com"]>,<Message-ID: <59c934efec401_1115b3fd69cc3f840917be@me-MBP.mail>>,<Subject: JC Daily Receipt Status - 2017-09-25>,<Mime-Version: 1.0>,<Content-Type: text/plain>,<Content-Transfer-Encoding: 7bit>> 我实际上没有收到电子邮件,我认为这意味着我没有在本地计算机上设置SMTP,但上述响应令人鼓舞.有没有堆栈我上面张贴的错误跟踪分开,所以我试图挖掘到Rails的源代码,我看到里面lookup_context.rb是normalize_name被从args_for_lookup保护的方法,进而得到由ViewPaths模块的称为内调用find_all方法.但除此之外,很难跟踪调用堆栈,因为我找不到find_all的调用者是谁. 我的问题是:第一次拨打电话有什么问题? 编辑1:我也尝试过format.html {渲染HTML: “< H1>您好米克尔< / H1>!” html_safe}代替format.text选项,按例子here,和我有类似的成功信息. 然后我尝试在normalize_name中添加一个byebug语句,以尝试识别成功的电子邮件发送的参数值是什么,但看起来这个方法在传递块时没有被调用.这让我更加怀疑这个问题与我的观点有某种关系.但我还不能确认. 解决方法
问题在这里
PurchaSEOrderStatusMailer.new.daily_report_email('JC').deliver 删除新的即 PurchaSEOrderStatusMailer.daily_report_email('JC').deliver 因为它的错误对象无法推断出模板路径/文件 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |