root_url返回空字符串

时间:2018-06-15 08:18:13

标签: ruby-on-rails url devise

所以我正在尝试使用link_to在电子邮件中添加链接。发送电子邮件的应用程序安装在两个单独的服务器上的开发和暂存环境中,但它们现在配置完全相同。出于某种原因,这一行:

<p><%= link_to t('.action'), "#{root_url}#!/?reset_password_token=#{@token}" %></p>

运行良好并在dev env中显示指向www.mywebsite.com / ...的链接,但它不会在staging环境中显示指向localhost:5000 / ...的链接。 config.action_mailer.default_url_options在我的conf文件和application_controller中配置得很好。 我还检查了日志,它看起来像{root_url}在staging env中返回一个空字符串,但在dev中没有。 我一直试图理解几个小时,但我只是不明白。

提前感谢您的帮助!

修改:这是我配置default_url_options

的方式
config.action_mailer.default_url_options = { 
:host => Rails.application.secrets.default_host, 
:protocol => Rails.application.secrets.default_protocol }

这就是我的application.yml中的DEFAULT_HOST和DEFAULT_PROTCOL的样子:

DEFAULT_HOST: mywebsite.com
DEFAULT_PROTOCOL: http

我在application_controller.rb中也得到了这个:

def default_url_options 
{ 
:host => Rails.application.secrets.default_host, 
protocol: Rails.application.secrets.default_protocol 
}
end

编辑2 :我仍无法找到问题的解决方案。我使用的应用程序使用sidekiq但没有sidekiq配置似乎覆盖default_url_options。如果有人有想法.. 另外,如果我在rails控制台中输入“Rails.configuration.action_mailer.default_url_options [:host]”,我会得到“=&gt;”mywebsite.com“。

2 个答案:

答案 0 :(得分:0)

尝试#{request.domain},它也可以,并确保您的IDE将其检测为变量,而不是字符串

答案 1 :(得分:0)

所以我终于找到了问题。我必须重新启动sidekiq,以便可以考虑代码中的更改。现在电子邮件将不会发送,但这是另一个问题大声笑