4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-01-31

#発生したエラー

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

image.png

その後本番環境内でコマンド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="XXXXXXXXXX@gmail.com"  # この部分
GMAIL_SPECIFIC_PASSWORD="XXXXXXXXXXXXXX"   # この部分                                                                                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                                                              

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

##反省点

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

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?