获取浏览器URL栏中显示的完整URL

时间:2015-11-15 22:11:20

标签: ruby-on-rails url heroku

我有一个rails应用,我想在他们注册时向他们发送电子邮件。该电子邮件包含指向其照片门户的链接,以便他们可以开始添加照片等。

class MyMailer < ActionMailer::Base
  def welcome_email
    # ...

    link = photos_url  # => www.myapp.com/photos

    # ...
  end
end

问题在于,当我将代码推送到Heroku并实时运行时,该链接并未按预期生成。

photos_url会返回相对于localhost的网址,最终会生成myapp.herokuapp.com/photos,这是不正确的。

更奇怪的是,如果我使用binding.pry暂停代码,并尝试查看photos_url返回的内容,则会按预期正确返回www.myapp.com/photos

有关如何解决此问题的任何想法?我不想自己从头开始构建URL,因为这意味着我必须为每个环境(localhoststagingproduction等进行此操作... )

谢谢!

1 个答案:

答案 0 :(得分:0)

ActionMailer与请求/响应周期无关,因此它不知道应用程序当前正在运行的主机是什么。实际上,电子邮件通常由一些后台工作进程发送,后者对当前请求URL一无所知。

为了使其工作,您需要设置ActionMailer default_url_options.host选项。

将此添加到您config/environments/production.rb

config.action_mailer.default_url_options = { host: 'www.yourapp.com' }