ActionMailerのURLをサブドメインに対応させる

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で設定してしまうんですね。アクセスされたドメインが設定されるので、サブドメインだろうが関係なし。うーん、スマート。


カテゴリー Ruby, Ruby on Rails | タグ | パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です