【Ruby on Rails】本番環境でのActionMailer機能のエラー発生と原因


発生したエラー

開発環境でActionMailerによる問い合わせ機能を実装し、本番環境に反映させた後、実際に機能の動作確認を行ったところ、エラー画面が表示されてしまった。

その後本番環境内でコマンドsudo tail -f log/production.logを実行し、ログを確認したところ、ArgumentError (SMTP To address may not be blank: []):が発生していることが判明。

解決を目指す中で以下の問題点が発見されたので、備忘録として記載。

1. config/environment内のファイルの設定の不備

ActionMailer機能の実装の際に編集したファイルの中で、まずメール送信の設定を行っていたファイル周辺を確認。
結果、development.rbで設定した内容をproduction.rbで記述していなかったことが判明。

開発環境でのみアプリを動かすのであれば前者のみで問題ないが、デプロイを前提とした場合、後者のproduction.rbにも同じ内容のメール送信設定をする必要がある。このあたりに関する認識が甘かった。

config/environments/development.rb
  config.action_mailer.raise_delivery_errors = true
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    address: 'smtp.gmail.com',
    port: 587,
    domain: 'gmail.com',
    user_name: ENV['SEND_MAIL'],
    password: ENV['GMAIL_SPECIFIC_PASSWORD'],
    authentication: 'plain',
    enable_starttls_auto: true
  }

同じ内容をproduction.rbにも記述

config/environments/production.rb
  config.action_mailer.raise_delivery_errors = true
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    address: 'smtp.gmail.com',
    port: 587,
    domain: 'gmail.com',
    user_name: ENV['SEND_MAIL'],
    password: ENV['GMAIL_SPECIFIC_PASSWORD'],
    authentication: 'plain',
    enable_starttls_auto: true
  }

サーバーを立て直し、再度機能の確認を行ったところ、またしても同じエラーが発生してしまう。

2. .envファイルのアップロードの不備

エラーが解決されなかったので、次に環境変数が本番環境にきちんと反映されているかどうかをviコマンドを使用して確認。

その結果、production.rb内で使用している環境変数の部分が、本番環境にある.envファイルに反映されていないことが判明。

GithubActionでプリコンパイルやbundle installなどの諸々の処理を設定していたため、見落としてしまっていたが、新たに環境変数を設定し.envファイルを編集した際には、それを都度、開発環境にアップロードして反映させる必要がある。
開発環境内でscpコマンドを使用して.envファイルを本番環境にアップロード。
本番環境で再度viコマンドを使用しファイルを確認。

.env
DB_USERNAME="XXXXX"
DB_PASSWORD="XXXXXXX"
DB_HOST="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
DB_DATABASE="sample.app"
GOOGLE_MAP_API_KEY="XXXXXXXXXXXXXXXXXXXXXXX"
SEND_MAIL="[email protected]"  # この部分
GMAIL_SPECIFIC_PASSWORD="XXXXXXXXXXXXXX"   # この部分                                                                                                                                                                                                                                                                                                           

編集内容が問題なく.envファイルに反映されていたため、サーバーの再起動を行い動作確認を行ったところ、問題なく作動。

反省点

初学者の為、本番環境での運用に向けた設定への理解が足りていなかった。
今後デプロイを前提としてアプリケーションの開発を行う場合は、こうした点に注意して実装を行っていく必要があると感じた。