2017-02-24 10 views
1

私のコントローラには、電子メールを作成して送信するセクションがありますが、その機能を本番環境でのみ使用できるようにしたいと考えています。Rails.envの代わりに使用できますか?

email = PortalEmail.new(params[:portal][:email]) if Rails.env.production? && PortalEmail.app_or_site?(@object) 

これを行うより良い方法はありますか?おそらく、設定/環境フォルダ内にありますか?

どのような考えにも感謝します。

答えて

3

テストRails.env.production?は、本番環境でのみ条件付きでコードを実行するための最善の最も簡潔な方法です。

つまり、コントローラから条件コードを削除して、プロダクション環境外のメールを受信するように偽のMTAを設定する必要があります。たとえば、MailCatcherは、あなたの開発環境から送信されたメールを "キャッチ"してそれを保持する偽のMTAを提供し、WebベースのUIで検査することができます。

条件付き環境チェックでコードを捨てるよりも、開発時に偽の依存関係を使用するようにアプリケーションを設定する方が一般的には優れています。

1

私はこのようなapplication.rbに設定されたフラグを使用することを好むだろう:

# application.rb 
config.can_send_mail = false 

# production.rb 
config.can_send_mail = true 

そして、環境への参照で私のアプリをポイ捨て避けるために

email = PortalEmail.new(params[:portal][:email]) if Rails.application.config.can_send_mail && PortalEmail.app_or_site?(@object) 

を使用しています。これにより、あとで電子メールを送信する必要がある(ステージング環境のような)新しい環境を後で追加する方が簡単になります。

+1

完璧なソリューション。私はあなたにとても感謝しています! – essentialgreen

0

開発モードで実行しているときに、letter_openerを使用してブラウザで電子メールをプレビューすることができます。

ただ、開発グループの下に追加して、あなたはこのようにそれを設定することができます

# config/environments/development.rb 

config.action_mailer.delivery_method = :letter_opener 

そして、あなたはもうその条件は必要ありません。

関連する問題