[英]Rails Mailer not working in production on website, but works in console
我正在用頭撞牆。
所以這是我的問題。 讓我們從非常簡單的開始。 我的應用程序中有一個聯系表,它會在點擊提交后發送電子郵件。 這種形式在開發模式下工作得很好。 但由於某些未知原因,它在生產中不起作用。
那么,你現在會做什么? 檢查配置/環境中的 production.rb? 已經完成了。 實際上不止於此——我曾嘗試在我的 VPS 上以生產模式使用 Rails 控制台發送郵件。 它有效。
UserMailer.send_data(Deliverer.new(full_name: "John Smith", email: "john.smith@yahoo.com", message: "Hello how are you")).deliver_now
我有一個名為 Deliverer 的模型,純粹用於反垃圾郵件目的。 在我的服務器上進入生產環境中的 Rails 控制台並粘貼此命令后,一封郵件將發送到我的郵箱,就像它應該在網站上工作一樣。
這是我的 production.rb 文件
require "active_support/core_ext/integer/time"
Rails.application.configure do
config.cache_classes = true
config.eager_load = true
config.consider_all_requests_local = false
config.action_controller.perform_caching = true
config.public_file_server.enabled = ENV["RAILS_SERVE_STATIC_FILES"].present?
config.assets.compile = true
config.active_storage.service = :local
config.force_ssl = true
config.action_mailer.default_url_options = { host: ENV['DOMAIN'] }
config.action_mailer.raise_delivery_errors = true
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
port: '465',
address: 'smtp.seznam.cz',
domain: ENV['DOMAIN'],
user_name: ENV['SMTP_USERNAME'],
password: ENV['SMTP_PASSWORD'],
authentication: :plain,
enable_starttls_auto: true,
ssl: true,
tls: true
}
config.log_level = :info
config.log_tags = [ :request_id ]
config.action_mailer.perform_caching = false
config.i18n.fallbacks = true
config.active_support.report_deprecations = false
config.log_formatter = ::Logger::Formatter.new
if ENV["RAILS_LOG_TO_STDOUT"].present?
logger = ActiveSupport::Logger.new(STDOUT)
logger.formatter = config.log_formatter
config.logger = ActiveSupport::TaggedLogging.new(logger)
end
# Do not dump schema after migrations.
config.active_record.dump_schema_after_migration = false
end
這是我在 /log/production.log 中發現的 SMTP 錯誤
Net::SMTPFatalError (550 5.7.1 未認證,請先使用AUTH。
正如我所說,此錯誤僅在嘗試從網站發送郵件時出現在生產環境中。 從生產作品的控制台發送電子郵件,網站上的表格沒有。 正如我所說,在開發中一切正常,包括控制台和表單本身。
我不知道該怎么辦。
TL:DR郵件程序在開發模式下工作(來自網站和 Rails 控制台)。 在生產中,郵件程序只能在 Rails 控制台中工作,而不是在網站上工作。
從網站提交表單后生產中的郵件程序不起作用,但在使用 Rails 控制台時工作正常。 開發完全沒有問題。
好的,我已經設法解決了這個問題。
由於某些未知原因,Rails 無法識別 ENV[] 變量。 我真的不知道為什么。
但是,一旦我將 ENV['SMTP_USERNAME'] 替換為“username@domain.com”並將 ENV['SMTP_PASSWORD'] 替換為“examplepassword”,它就開始工作並且郵件程序將電子郵件發送到我的收件箱。
我不知道,因為進入 rails console 或 irb 並使用
放 ENV['SMTP_USERNAME']
實際上打印了我的 smtp 用戶名,密碼和其他環境變量也發生了完全相同的事情。 我不知道出了什么問題。
編輯好吧,我已經做了一些故障排除。 似乎只有 config/environments/production.rb 在訪問 ENV 變量時有問題。 我不確定為什么...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.