root_url returns 空字符串

root_url returns empty string

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

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

运行良好并在开发环境中显示 link 到 www.mywebsite.com/...,但它不会在暂存环境中显示 link 到 localhost:5000/... 反而。 config.action_mailer.default_url_options 在我的 conf 文件和 application_controller 中配置良好。 我还检查了日志,看起来 {root_url} returns 在暂存环境中是一个空字符串,但在开发环境中不是。 几个小时以来我一直在努力理解,但就是不明白。

提前感谢您的帮助!

编辑 :这就是我配置的方式 default_url_options

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

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

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 配置的 none 似乎覆盖了 default_url_options。如果有人有想法.. 此外,如果我在 rails 控制台中键入 "Rails.configuration.action_mailer.default_url_options[:host]",我会得到 "=> "mywebsite.com".

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

所以我终于找到了问题所在。我不得不重新启动 sidekiq,以便可以考虑代码中的更改。现在电子邮件无法发送,但这是另一个问题 lol