禁用特定环境的邮件程序或rails中的远程邮件

时间:2015-12-15 11:21:53

标签: ruby-on-rails

在我的rails应用程序中,我为heroku配置了三种不同的环境/遥控器:

  • production(www.myapp.com)
  • staging(staging-myapp.herokuapp.com)
  • playground(playground-myapp.herokuapp.com)

在我的游乐场环境中,我根本不想发送电子邮件通知,因此我需要告诉我的production.rb它应该忽略此环境中的电子邮件发送。

到目前为止,我已通过request.subdomain访问了环境信息,但我不相信这是一个很好的最佳做法。此外,request.subdomain在模型或邮件程序中不可用,因此它具有无用的长期性。

根据我使用的不同遥控器配置我的rails应用程序的最佳做法是什么?

另一个用例是设置一个passwort,如果我正在进行分段。到目前为止,我通过应用程序控制器和一个简单的黑客来做到这一点:

if request.subdomains.first == 'staging-myapp'
  authenticate_or_request_with_http_basic do |username, password|
      username == "user123" && password == "12345"
  end
end

2 个答案:

答案 0 :(得分:1)

你可以添加一个新的环境" playground"并将邮件设置设置为您喜欢的内容。

检查How to create a new environment in Ruby on Rails?以获取有关如何创建新环境的详细说明。

答案 1 :(得分:1)

为每个遥控器设置不同的config variables,并使用相同的引用在代码中访问它们,例如。

authenticate_or_request_with_http_basic do |username, password|
  username == ENV['USERNAME'] && password == ENV['PASSWORD']
end

所以对于每个遥控器你都会这样做:

heroku config:set USERNAME=productionpassword --app production-app
heroku config:set USERNAME=stagingpassword --app staging-app
heroku config:set USERNAME=playground --app playground-app

以同样的方式,您可以在 production.rb 文件中指定配置变量(例如,用于您的Mailer设置),因此您不需要单独的staging.rb和playground。 rb使用Heroku时。您可以在Heroku文档herehere中了解详情。