#発生したエラー
開発環境で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.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.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コマンド
を使用しファイルを確認。
DB_USERNAME="XXXXX"
DB_PASSWORD="XXXXXXX"
DB_HOST="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
DB_DATABASE="sample.app"
GOOGLE_MAP_API_KEY="XXXXXXXXXXXXXXXXXXXXXXX"
SEND_MAIL="XXXXXXXXXX@gmail.com" # この部分
GMAIL_SPECIFIC_PASSWORD="XXXXXXXXXXXXXX" # この部分
編集内容が問題なく.envファイル
に反映されていたため、サーバーの再起動を行い動作確認を行ったところ、問題なく作動。
##反省点
初学者の為、本番環境での運用に向けた設定への理解が足りていなかった。
今後デプロイを前提としてアプリケーションの開発を行う場合は、こうした点に注意して実装を行っていく必要があると感じた。