我有一个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,因为这意味着我必须为每个环境(localhost
,staging
,production
等进行此操作... )
谢谢!
答案 0 :(得分:0)
ActionMailer与请求/响应周期无关,因此它不知道应用程序当前正在运行的主机是什么。实际上,电子邮件通常由一些后台工作进程发送,后者对当前请求URL一无所知。
为了使其工作,您需要设置ActionMailer default_url_options.host
选项。
将此添加到您config/environments/production.rb
:
config.action_mailer.default_url_options = { host: 'www.yourapp.com' }