環境
macOS: Big Sur Ver11.2.1
Rails: 6.1.1
Ruby: 2.6.5
本番環境: Heroku
記事の目的
Herokuにデプロイしたアプリケーションでパスワードリセットが正しく動作すること。
パスワードリセット機能はdeviseで導入済み、開発環境で動作確認済みです。
詳しくは、こちらの記事をどうぞ!
実装
今回はアプリケーションがHerokuにデプロイされているからHerokuのアドオンであるMailgunを利用して本番環境でのメール送信を試みます。
手順①:アプリの環境設定
Mailgunの公式ドキュメントを参考に、以下のようにファイルを編集。
どちらかというとRailsチュートリアルの11章を参考にしたほうがわかりやすい。
Rails.application.configure do
(中略)
config.action_mailer.raise_delivery_errors = true
config.action_mailer.delivery_method = :smtp
host = 'https://furima-34501.herokuapp.com/'
config.action_mailer.default_url_options = { host: host }
ActionMailer::Base.smtp_settings = {
:port => ENV['MAILGUN_SMTP_PORT'],
:address => ENV['MAILGUN_SMTP_SERVER'],
:user_name => ENV['MAILGUN_SMTP_LOGIN'],
:password => ENV['MAILGUN_SMTP_PASSWORD'],
:domain => host,
:authentication => :plain,
}
(略)
ここで環境変数をいきなり使っていますが、この後にherokuコマンドを打つと自動的にHerokuの本番環境でも環境変数が設定されるようです。なので、あらかじめ先に決められた環境変数名で記述しているだけ。
手順②:Herokuのアドオンを追加
まずはアプリケーションをHerokuにデプロイしましょう。
% git push heroku master
% heroku run rails db:migrate
デプロイできたら以下のコマンドを実行。
% heroku addons:create mailgun:starter
最後のstarterとは、アドオンのプラン名です。今回は無料プランにしています。
ここで、さっきconfig/environmemts/production.rbに記載した環境変数が設定された確認できます。
% heroku config:get MAILGUN_SMTP_LOGIN
% heroku config:get MAILGUN_SMTP_PASSWORD
実行すると、ちゃんと環境変数が結果に返ってくるはず!
手順③:受信メールの認証
無料プランを利用している場合は、承認された受信者にのみ送信するように制限がかかっているため、本番環境でメールを送るアドレスを認証する作業が必要となる。
以下のコマンドを実行。
% heroku addons:open mailgun
すると、MailgunダッシュボードのURLが表示され、勝手にブラウザが起動します。
MailGun公式ドキュメントに従い、受信するメールアドレスを認証します。画面左側の「Sending」→「Domains」のリストにある「sandbox」で始まるサンドボックスドメインを選択します。
画面右側の「Authorized Recipients」にメールを送信するアドレス(とりあえず自分の個人アドレスとか)を入力し、認証します。
最後に
今回は無料プランかつHerokuにデプロイしたアプリケーションでの実装でした。
Railsチュートリアル様、ありがとうございました!