gpt4 book ai didi

ruby-on-rails - 尝试通过 Rails ActionMailer 发送电子邮件导致调用 `normalize_name` 内的 `lookup_context.rb` 失败

转载 作者:行者123 更新时间:2023-12-04 17:07:12 24 4
gpt4 key购买 nike

我有一个继承自ApplicationMailer 的Mailer 类,而ApplicationMailer 又继承自ActionMailer::Base。 Ruby 版本是 ruby 2.4.1p111 (2017-03-22 revision 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

该 View 位于 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'

我尝试通过 format阻止对 mail 的调用具有相同调用的助手,如下所示:
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 源代码,我看到了 normalize_name里面 lookup_context.rbargs_for_lookup 中调用protected 方法,该方法又被 ViewPaths 调用模块的 find_all方法。但除此之外,很难追踪调用堆栈,因为我找不到 find_all 的调用者。是。

我的问题是:第一次调用 mail 有什么问题? ?

编辑 1:我也试过 format.html { render html: "<h1>Hello Mikel!</h1>".html_safe }而不是 format.text选项,根据示例 here ,我收到了类似的成功消息。

然后我尝试在 normalize_name 中添加一个 byebug 语句, 来尝试确定成功发送电子邮件的参数值是什么,但看起来这个方法在传递 block 时没有被调用。这让我更加强烈地怀疑这个问题与我的观点有关。但我还不能确认。

最佳答案

问题在这里

PurchaseOrderStatusMailer.new.daily_report_email('JC').deliver

删除新的,即
PurchaseOrderStatusMailer.daily_report_email('JC').deliver

由于其无法推断模板路径/文件的错误对象

关于ruby-on-rails - 尝试通过 Rails ActionMailer 发送电子邮件导致调用 `normalize_name` 内的 `lookup_context.rb` 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46410478/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com