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

而且你不需要把条件了。

相关问题