Railsを使っていても実はメールを使うようなところを担当したことがなかったので今更ActionMailerについて勉強中です。
ActionMailerの設定はenvironments/(production|development|test).rbとか、もしくはapplication.rbに書くのでしょうが、普通はenviroments以下だと思います。こんな感じですね。
config.action_mailer.default_url_options = { host: 'localhost:3000' }
config.action_mailer.default_url_options = { host: 'example.com' }
しかしですね、いろんな環境でお試しで動かしたい場合があると思うんですよ。ステージングとか。デモとか。
そういうときにどういう風にすればいいのか。
environments/staging.rbを作って対応、とかが正しいのかもしれませんが、面倒だなぁと思ってググっていたところ、すごい簡単な解決策が載ってたので紹介しておきます。
参考サイト: Rails 4 ActionMailer subdomain urls
class ApplicationController < ActionController::Base before_action :set_mailer_host private def set_mailer_host ActionMailer::Base.default_url_options[:host] = request.host_with_port end end
リクエストを受けたサーバのドメインとポートをbefore_actionで設定してしまうんですね。アクセスされたドメインが設定されるので、サブドメインだろうが関係なし。うーん、スマート。