Engineering

Jan 17, 2018

Rails+Devise+LetterOpenerでシードを行う際に、メールがタブで開かれないようにする

 

letter opener便利ですよね。

ryanb/letter_opener

letter openerは、開発しているアプリケーションからメールが飛んだときに、メールを送信する代わりに、送信するメールをタブで開いてくれます。

が、

今回Rails + Devise + Letter Openerを使った場合に、ユーザのアカウント作成時のメールのタブがポコポコでてくるようになってしまったのでその対策を共有します。

 

やろうとしたこと

 

今回はテストデータとして、rake db:seedでユーザを10人くらい自動で生成するようなスクリプトを組みました。

開発中にDBを綺麗にしたいときに、

rake:db:reset && rake db:seed

のようにカジュアルに実行できるようにしたいです。

 

db/seeds.rb

User.delete_all
10.times do |idx|
  User.create(
    name: "user_#{idx + 1}",
    password: 'password',
    email: "user_#{idx + 1}@example.com",
    age: 25
  )
end

(これはサンプルで実際はFactoryBotを使ったりしています)

この方法だと、確かにユーザは10人作れるのですが実際にシードを走らせてみるとユーザ作成時にdeviseが確認のEmailを飛ばすので、それに呼応したletter openerがポコポコと丁寧に10人分 のメールをポコポコとタブで開いてくれます。

さすがに、毎回シードを走らすたびに10個もタブが開くのはいただけないので少し調べてみました。

解決方法

解決方法は割と簡単で 以下のように設定を足して

ActionMailer::Base.perform_deliveries = false

シード内でメールが飛ばないようにするだけで解決できます。

db/seeds.rb

# LetterOpnerでメールが開かれないようにする
ActionMailer::Base.perform_deliveries = false

User.delete_all
10.times do |idx|
  User.create(
    name: "user_#{idx + 1}",
    password: 'password',
    email: "user_#{idx + 1}@example.com",
    age: 25
  )
end

関連記事

記事検索

気になるサイト内の記事を検索する

プロフィール

バンクーバー在住のフルスタックエンジニアです。React, Ruby on Rails, Go などでお仕事しています。職場がトロントなので日本、トロント、バンクーバーの三つの時天空を操って生活しています。

プロモーション