【问题标题】:Rails & Devise: how to configure mail with domain name automatically?Rails & Devise:如何自动配置带有域名的邮件?
【发布时间】:2013-10-21 00:07:56
【问题描述】:

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

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

【问题讨论】:

    标签: ruby-on-rails devise engineyard


    【解决方案1】:

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

    Devise.setup do |config|
      config.mailer_sender = Proc.new { your_magic_here }
    end
    

    【讨论】:

    • 谢谢,我会在生产盒上试一试,看看我是否能找出域名 - 但据我所知,域名在运行时并不“可见”盒子。毕竟应用程序可以在几个域上运行,所有域都在 DNS 级别处理。
    • 完全正确。这就是为什么我们在每个请求中设置一个全局对象来保存基于域的配置。然后在 proc 中访问该对象。该对象类似于 I18n gem 中所做的。
    【解决方案2】:

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

    【讨论】:

    • 您能否更具体地说明如何在部署时编写环境文件?这就是我缺少的技巧。
    • 好吧。在环境文件中指定主机作为 HOST_URL,并在部署配方 grep 文件中为 HOST_URL 指定主机,并根据要部署的服务器(暂存、生产)将其替换为您想要的 url。 config.action_mailer.default_url_options = { :host => 'HOST_URL' }
    • 啊,我明白了。在这种情况下,我没有明确的方法可以使用('ey deploy' 是我们的工作方式),但否则这就是我在其他框架中使用的策略。谢谢。
    【解决方案3】:

    首先,我认为您应该分离应用程序的环境。查看此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 对象的更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-15
      • 1970-01-01
      • 1970-01-01
      • 2018-12-13
      • 1970-01-01
      • 2015-03-15
      相关资源
      最近更新 更多