2017-02-24 70 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 

而且你不需要把條件了。

相關問題