我需要一些关于在生产Ruby-on-Rails站点中配置邮件的建议。
我在EngineYard上部署我的Rails应用程序。我有几个网站,例如demo.mydomain.com
或staging.mydomain.com
- 如何配置Devise,以便在部署时我可以确保确认邮件自动来自demo.mydomain.com
或staging.mydomain.com
? ie ,我想要相同的GitHub代码库,并希望动态填充配置。
目前在config/environments/production.rb
我有一行:
config.action_mailer.default_url_options = { :host => 'demo.mydomain.com' }
但是当同一代码部署到staging.mydomain.com
时,这是不正确的,因为它们都在RAILS_ENV=production
中运行
有什么想法吗?
谢谢, 戴夫
更新:目前,为了实用,我添加了特定的环境来对邮件程序域进行硬编码。现在,demo.mydomain.com
在environments/demo.rb
上运行,www.mydomain.com
在environments/productions.rb
上运行。我不喜欢这个是文件之间的重复,我不清楚如何像我一样干它们,例如,{{1} }
答案 0 :(得分:4)
在您的设计配置中,通常config/initializers/devise.rb
您可以为设计配置邮件发件人。此配置采用proc,因此可以在运行时评估某些内容。
Devise.setup do |config|
config.mailer_sender = Proc.new { your_magic_here }
end
答案 1 :(得分:1)
理想的舞台演出&生产服务器应该在不同的rails环境中运行。如果你想在staging& amp;生产服务器具有不同的动作邮件URL,那么它应该在部署级别完成。您可以在部署时始终编写环境文件。
答案 2 :(得分:0)
首先,我认为您应该将应用程序的环境分开。请查看此guide以了解如何执行此操作。
然后,在你的设计配置中尝试这样的事情:
Devise.setup do |config|
if Rails.env.production?
config.mailer_sender = "no-reply@domain.com"
elsif Rails.env.staging?
config.mailer_sender = "no-reply@staging.domain.com"
else
config.mailer_sender = "no-reply@domain.com"
end
...
选中此guide以了解有关Proc对象的更多信息。