当自定义控制器方法在 Rails 中触发操作邮件程序时出现 500 错误(在 Heroku 上)



我的应用程序在单击按钮时会发送电子邮件,这在开发中工作正常,但在生产(Heroku(上进行测试时出现500错误

日志指向与端口的连接或允许我创建的自定义 POST 方法来启用触发器有关,但我无法破译它。任何指示或帮助将不胜感激。

按钮单击失败的日志:


[0f392bc6-e18e-4387-a3c1-043c58f6fa95] GifMailer#nearby_email: processed outbound mail in 0.7ms
[0f392bc6-e18e-4387-a3c1-043c58f6fa95] Delivered mail 5edfb32c2444b_41f5b823695@0f888f21-e8fa-493c-af7e-0e6fd5659d54.mail (2.8ms)
[0f392bc6-e18e-4387-a3c1-043c58f6fa95] Date: Tue, 09 Jun 2020 16:05:00 +0000
- From: jack@xxxx.xxxxx
- To: xxxxxxx@gmail.com
- Message-ID: <5edfb32c2444b_41f5b823695@0f888f21-e8fa-493c-af7e-0e6fd5659d54.mail>
- Subject: Hello in there
- Mime-Version: 1.0
- Content-Type: text/html;
- charset=UTF-8
- Content-Transfer-Encoding: 7bit
-
- Hello in there
[0f392bc6-e18e-4387-a3c1-043c58f6fa95] Completed 500 Internal Server Error in 13ms (ActiveRecord: 2.7ms | Allocations: 3021)
[0f392bc6-e18e-4387-a3c1-043c58f6fa95]
[0f392bc6-e18e-4387-a3c1-043c58f6fa95] Errno::ECONNREFUSED (Connection refused - connect(2) for "localhost" port 25):
[0f392bc6-e18e-4387-a3c1-043c58f6fa95] app/controllers/gifs_controller.rb:12:in `email'
[0f392bc6-e18e-4387-a3c1-043c58f6fa95] Processing by ErrorsController#internal_server_error as HTML
[0f392bc6-e18e-4387-a3c1-043c58f6fa95] Parameters: {"authenticity_token"=>"ZTpQtYnCZwlx9Fy/PWwMES+6CT8kXFoQu8pDr4ok+L1bzbeXsL6ikj8Yof9VJzFUEeVO/84xl3Uc8SOFxjg5cQ==", "gif_email"=>"xxxxxxx@gmail.com"}
[0f392bc6-e18e-4387-a3c1-043c58f6fa95] Rendering errors/internal_server_error.html.erb within layouts/errors
[0f392bc6-e18e-4387-a3c1-043c58f6fa95] Rendered errors/internal_server_error.html.erb within layouts/errors (Duration: 11.9ms | Allocations: 154)
[0f392bc6-e18e-4387-a3c1-043c58f6fa95] Rendered shared/_favicons.html.erb (Duration: 0.1ms | Allocations: 6)
[0f392bc6-e18e-4387-a3c1-043c58f6fa95] Completed 500 Internal Server Error in 28ms (Views: 27.5ms | ActiveRecord: 0.0ms | Allocations: 1742)

控制器:


class GifsController < ApplicationController
protect_from_forgery except: [:email, :show], prepend: true
skip_before_action :verify_authenticity_token
before_action :set_gif, only: [:show, :edit, :update, :destroy]
before_action :authenticate_user!, except: [:show]
def email
@gif_email = params[:gif_email]
GifMailer.with(gif_email: @gif_email).nearby_email.deliver_now
end
helper_method :email
...
end

邮件:


class GifMailer < ApplicationMailer
default from: "jack@xxxxxxxx"
def nearby_email
@gif_email = params[:gif_email]
mail(to: @gif_email, content_type: "text/html", subject: "Hello in there", body: "Hello in there", template_path: 'app/views/layouts/mailer.html.erb' )
end
end

生产.rb 邮件设置:


config.action_mailer.perform_caching = false
config.action_mailer.delivery_method = :smtp
host = 'xxx.xxxxx'
config.action_mailer.default_url_options = { host: host }
config.action_mailer.smtp_settings = {
address:              'smtp.gmail.com',
port:                 587,
user_name:            ENV['GMAIL_USERNAME'],
password:             ENV['GMAIL_PASSWORD'],
authentication:       'plain',
enable_starttls_auto: true,
openssl_verify_mode: 'none'
}

相关路线:


post '/email', to: "gifs#email", as: :hellointhere
resources :gifs, path: ''

问题在于应用程序的配置方式。我正在使用Jumpstart Rails平台,该平台可以进行大量后台配置。不幸的是,它不允许我使用Gmail,所以我不得不使用另一个第三方电子邮件服务。

对于任何对Jumpstart有相同问题的人在:

  1. 注册支持的电子邮件服务之一,我使用了邮戳,请获取您的 api 密钥
  2. 在 rails 中输入凭据:编辑 --环境=生产
  3. 删除生产中可能具有的任何自定义 SMTP 配置设置.rb
  4. 完成您正在使用的任何平台的授权流程
  5. 利润

最新更新