【问题标题】:How to get dynamic host when sending email发送邮件时如何获取动态主机
【发布时间】:2014-05-19 07:10:32
【问题描述】:

如果我在具有相同环境的不同系统中启动 Rails 服务器,我需要获取动态主机。如何获取主机并将其发送到邮件正文。

目前正在使用以下配置,

in config/development.rb: 

config.action_mailer.default_url_options = { :host => "example.com" }

in app/mailers/notifications.html.erb :

<%= test_url(id) %>

【问题讨论】:

  • 那么配置有什么问题?
  • @VedPrakash 如果两个 Rails 服务器在具有相同(开发)环境的两个系统中运行。如何区分两个系统的主机。

标签: ruby-on-rails email actionmailer


【解决方案1】:

从控制器调用邮件函数时可以传递请求--

class UserMailer < ActionMailer::Base

  def welcome_email(user, request)
    UserMailer.default_url_options[:host] = request.host_with_port #option1
    @user = user
    @url  = user_url(@user, host: request.host_with_port ) #option2 (do this for each link)
    mail(:to => user.email,
         :subject => "Welcome to My Awesome Site")
  end
end

在上面的代码中,request.host_with_port 是您的情况下的"example.com"

所以上面是提供请求主机的更动态的方式,正如您所见,您可以在从控制器调用邮件程序函数时传递请求。

这是您可以检查的来源 - Generating-urls-in-action-mailer-views.

这也是action-mailer-default-url-options-and-request-host 处的解释,此处标记为供阅读的答案。

【讨论】:

  • 我正在使用后台进程调用 Mailer 模型,而不是使用控制器调用。那我怎样才能得到不同的主机。
【解决方案2】:

这种对不同应用服务器的统一处理主要是一个特性。

如果你想区分我建议设置和使用环境变量。

例如,您在主机中导出具有不同值的 APP_SERVER 变量,然后从 Ruby/Rails 代码中访问它们

ENV['APP_SERVER']

【讨论】:

    猜你喜欢
    • 2022-06-30
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多