我的Rails(3.2.21)应用发送了大量的电子邮件,而且它经常在开发和过渡环境中进行测试。因此,每当电子邮件正文中有一个URL时,主机名都需要与环境相匹配。例如:
- 偏差:http://localhost:3000/something
- 分段:http://example.staging.com/something
- 生产:http://example.com/something
目前,我在initializers/setup_email.rb
中有一个初始化器,它根据环境设置ActionMailer::Base.default_url_options[:host]
变量(这个初始化器还设置其他电子邮件设置fwiw)。
但是,dev条件块有一个:host
AND:port
,因此它看起来如下所示:
ActionMailer::Base.default_url_options[:host] = "localhost"
ActionMailer::Base.default_url_options[:port] = 3000
在我的邮件类中,我在所有需要显示URL的地方都使用了这些丑陋的条件语句,因为我需要在dev中说明port。
if Rails.env.production? || Rails.env.staging?
@url = "http://#{ActionMailer::Base.default_url_options[:host]}/something"
elsif Rails.env.development?
@url = "http://#{ActionMailer::Base.default_url_options[:host]}:#{ActionMailer::Base.default_url_options[:port]}/something"
end
这里我错过了什么最佳实践?我是否应该在邮件程序类的任何方法之前只使用上面的条件语句 once,这样我就可以设置一次@host
变量,然后忘记它?
2条答案
按热度按时间ubof19bj1#
我认为最简单的方法是在
development.rb
、production.rb
和staging.rb
中定义自定义常量。比如:
这样就可以避免使用条件语句,只需要使用
MailerURL
,它会因环境而异9cbw7uwe2#
也可以将其另存为环境变量
ENV["HOST_URL"]