5

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

我在 EngineYard 上部署了我的 Rails 应用程序。我有几个站点,例如demo.mydomain.comstaging.mydomain.com- 我如何配置 Devise 以便在部署时我可以确保确认邮件来自demo.mydomain.comstaging.mydomain.com自动?,我想要相同的 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。我喜欢的是文件之间的重复,我不清楚如何像我一样将它们干燥,例如database.yml

4

3 回答 3

4

在您的设计配置中,通常config/initializers/devise.rb您可以为设计配置邮件发件人。此配置需要一个 proc,因此可以在运行时评估某些内容。

Devise.setup do |config|
  config.mailer_sender = Proc.new { your_magic_here }
end
于 2012-01-30T18:13:48.640 回答
1

理想情况下,登台和生产服务器应该在不同的 Rails 环境中运行。不过,如果您想让生产环境在具有不同操作邮件程序 url 的登台和生产服务器上运行,那么它应该在部署级别完成。您始终可以在部署时编写环境文件。

于 2012-01-30T20:20:54.450 回答
1

首先,我认为您应该分离应用程序的环境。查看本指南以了解如何做到这一点。

然后,在您的设计配置中尝试这样的事情:

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
  ...

查看本指南以了解有关 Proc 对象的更多信息。

于 2013-10-19T18:49:56.653 回答