Action Mailer Previewsをproduction環境で使えるようにする

f:id:sktktk1230:20180726121250p:plain

Railsに搭載されているAction Mailerという機能でメールを送信することができるのですが、このメールの文面のプレビュー機能がAction Mailer Previewsです
このプレビュー機能をproduction環境でも使えるようにして、非エンジニアの人にも簡単にメールの文面を確認してもらいたいと思って、対応してみたので、そのやり方をまとめてみました

環境

  • Ruby 2.4.2
  • Ruby on Rails 4.2.8

手順

1. production環境でmailer_previewが閲覧できるように config/application.rb に設定の追加をします

config.action_mailer.preview_path = "#{Rails.root}/lib/mailer_previews"
# production環境でもpreviewが可能にする
config.action_mailer.show_previews = true

2. ドメイン名/rails/mailers から管理画面のパス配下の ドメイン名/admin/rails/mailers になるようにします

config/initializers 配下にファイルを作成し、routes.rbへの追加処理を記述します

Rails.application.config.after_initialize do |app|
  app.routes.prepend do
    get "admin/rails/mailers"         => "rails/mailers#index", internal: true
    get "admin/rails/mailers/*path"   => "rails/mailers#preview", internal: true
    get "rails/mailers"         => redirect('admin/rails/mailers')
    get "rails/mailers/*path"   => redirect('admin/rails/mailers#preview')
  end
end

こちらの記述はrails/railsを参照しました github.com

3. lib/mailer_previews/previews 配下にpreviewのクラスを作成します

y_yagiさんのブログが非常にわかりやすいです

参照:RailsのAction Mailer Previewsについて | 日々雑記

注意点

これでproduction環境で domain/admin/rails/mailers にアクセスするとmailerを閲覧することが可能になりましたが、認証機能はないので、ユーザーも /admin/rails/mailers にアクセスすると閲覧出来てしまいます
そのため、webサーバ(nginx)等で /admin を社内からのみアクセスできないようになど対策する必要があります