はじめに
今回は開発環境で「パスワードを忘れた方はこちらから」に関係する実装を終えた後のお話。本番環境でもメールの送受信が可能にするための設定を行いました。
デプロイ先をKoyeb
というサービスを初めて使用してエラーが出たのでエラー内容と解決までの道のり?を記事にまとめていきたいと思います。
環境
- Windows, WSL
- Docker
- Ruby 3.2.3
- Rails 7.1.3
ローカル~本番環境のメール設定参考記事
先にローカル~本番環境でのメール設定は次の記事を参考にしました。(私のも載せておきます)
本題
記事を参考に私はまず以下の事を行いました
- Google側でアプリのパスワード16桁等を生成
-
gem
ファイルにgem 'dotenv-rails’
追記しインストール&.env
ファイル生成・編集 - 本番環境の設定を
config/environments/production.rb
ファイルに入力 -
config/initializers/devise.rb
にも追記 - そしてKoyeb側で「Secrets」から「MAILER_SENDER」と「MAILER_PASSWORD」を追加(このMAILER_SENDERなどの文字はそれぞれ異なると思います。)
👇例:NameにはMAILER_SENDER。Valueには.env
に記載した使用するメールアドレスを入力。同じようにMAILER_PASSWORDも設定。
デプロイ後エラー発生
まずはエラー内容から
[033adc77-8c39-934b-b16f-2a9f80eed2a9] ArgumentError (SMTP-AUTH requested but missing user name):
[033adc77-8c39-934b-b16f-2a9f80eed2a9]
[033adc77-8c39-934b-b16f-2a9f80eed2a9] app/controllers/users/passwords_controller.rb:5:in `create'
このエラーメッセージは、SMTPサーバーにメール送信の認証を要求しましたが、ユーザー名が見つからないために発生している状態です。具体的には、Rails
が MAILER_SENDER
という環境変数で設定したGmailのメールアドレスを認識できていない状態になります。
エラーの内容を分解すると
- ArgumentError: Rubyで引数が正しく渡されていないときに出るエラーです。ここでは、SMTP認証の際に「ユーザー名(メールアドレス)」が必要なのに、見つからないためにエラーが出ています。
- SMTP-AUTH requested but missing user name: SMTP(メールを送信するためのプロトコル)を使う際に、「ユーザー名」が不足しているというメッセージです。メール送信には、送り元のメールアドレス(ユーザー名)とパスワードが必要ですが、今回の設定ではユーザー名(メールアドレス)が設定されていないか、正しく読み込まれていないためにエラーが発生しています。
Koyeb上で確かに環境設定したはずなのに??
Koyeb上で確かに設定はしていましたが。
実は、もう一つ設定箇所がありました(探すまでに結構時間かかった)
以下手順になります
-
Overviewから該当アプリを選択
-
Settingsをクリック
-
Environment variablesを選択しAdd anotherで次のように設定します(※先にSecretの方で設定することでプルダウンで選択できるようになります)
-
Add完了したら下の方にスクロールするとある「Save add deproy」でBuildして無事デプロイされれば完了!!
さいごにまとめ
エラーコードをGPTに確認してもらった際、新たにコードを追加するなど明らかに違うのでは、と少し察することができてよかった(沼ループにはまるところだった💦)
はじめてのデプロイ先で記事が少なかったので、無事に本番環境でもメールの動作を確認出来てよかったです
今回の記事が何か参考になれば幸いです