SendGrid 和 Rails 7、Heroku 生产错误

问题描述 投票:0回答:1

我有一个在 Heroku 上使用 Ruby 3.2.2 的 Rails 7 应用程序。当有人注册时事通讯或填写联系表格时,它使用 SendGrid 发送感谢电子邮件。我已对 SendGrid 帐户验证单个电子邮件地址和域。当然我有 api 密钥作为密码。默认情况下,他们使用字符串“apikey”作为用户名。我已经设置并配置了邮件程序。我在 Production.rb 中配置了 SendGrid 信息。主页是登陆页面,有登陆控制器。当表单提交后,登陆控制器有create动作。如果满足某些检查,并且 model.save 到数据库,则发送电子邮件,将某些信息传递给邮件程序。我开发了这个功能,效果非常好,电子邮件通过 SendGrid 转发到适当的地址。对于时事通讯,这只是对所提供的电子邮件的感谢。对于联系表单,请转到管理员,该管理员是从具有该角色的用户中挑选出来的,并向收件人表示感谢。

我可以从仪表板看到 Heroku 环境中的环境变量,并在运行时验证它们。不过,我不断在生产控制台日志中收到此错误,并且在浏览器中收到来自 Turbo 的获取错误。

ArgumentError(已请求 SMTP-AUTH 但缺少秘密短语):

请求中发送的身份验证似乎丢失了。感觉就像密码不存在一样。我不明白这种工作在开发中而不是在生产中的脱节。可能是aysnc的问题?但是我没有收到我期望的错误。当我在兜圈子时,我邀请任何人帮助我解决这个问题。需要注意的是,我还没有添加 SendGrid gem。我正在将信息保存到数据库中。再说一遍,这在开发中有效,在生产中出错,这让我想到配置问题,只是没有看到它。这是一些相关代码:

生产.rb配置

/# 每个设备的配置操作邮件程序
config.action_mailer.default_url_options = { 主机: 'https://xxx.herokuapp.com/', 端口: 3000 }

/# 通过 sendgrid.net 设置 smtp 的 Action Mailer
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
地址:'smtp.sendgrid.net',
端口:587,
用户名:'apikey',
密码:Rails.application.credentials.dig(:sendgrid_password),
身份验证:“普通”,
enable_starttls:真
}

创建动作

在继续之前检查隐私政策。

/# POST /登陆/时事通讯
/# 从登陆页面创建新闻通讯
def create_newsletter
@newsletter = Newsletter.new(newsletter_params)
如果 newsletter_params[:pp_check] == "0" || newsletter_params[:pp_check] == false
redirect_to root_path,警告:“请检查隐私政策”
否则
respond_to do |格式|
如果@newsletter.save
/# 发送电子邮件给司机 NewsletterMailer.new_newsletter_email(@newsletter).del
iver_now
format.html {redirect_to root_path,注意:“感谢您注册!” }
否则
format.html {redirect_to root_path,alert:“注册失败”}
结束
结束
结束
结束

ApplicationMailer.rb

来自电子邮件的默认值在 sendgrid 中经过验证。

类ApplicationMailer < ActionMailer::Base

默认来自:“[电子邮件受保护]
布局“邮件”
结束

我已经审阅了 SendGrid 和 Heroku 的文档。已更改 smtp 的 prod.rb 配置。尝试了几个新的 api 密钥。与 Codium 就不同的尝试进行了对话,其中重点是环境变量。确保电子邮件和域在 SendGrid 中得到验证。已经看过几个视频教程。

我很乐意被引导到正确的方向。这感觉像是一个我所缺少的简单解决方案,因为我已经盯着它看了太久了。

仓库:https://github.com/Developer3027/recruitment

heroku smtp sendgrid ruby-on-rails-7
1个回答
0
投票

我尝试解决这个问题有一段时间了。最后,我继续在博客方面添加其他功能。这需要数据库迁移并重新启动测功机。问题出在需要重建的配置中,而只有重置测功机才会发生这种情况。就像更改初始化程序文件一样,您必须停止服务器并使用 bin/dev 重新启动。我从来没有想过要重置 Heroku dyno,假设每次主推都会完全重建它。它一直在工作,只是最初从未设置过。我确信我扼杀了这个解释,但对你理解我的意思很有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.