Rails&设计:如何自动配置带域名的邮件?

时间:2012-01-30 14:25:44

标签: ruby-on-rails devise engineyard

我需要一些关于在生产Ruby-on-Rails站点中配置邮件的建议。

我在EngineYard上部署我的Rails应用程序。我有几个网站,例如demo.mydomain.comstaging.mydomain.com - 如何配置Devise,以便在部署时我可以确保确认邮件自动来自demo.mydomain.comstaging.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.comenvironments/demo.rb上运行,www.mydomain.comenvironments/productions.rb上运行。我喜欢这个是文件之间的重复,我不清楚如何像我一样干它们,例如,{{1} }

3 个答案:

答案 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对象的更多信息。