如何配置 Rails 中内置的 URL 助手生成的协议?

How to configure the protocol generated by built-in URL helpers in Rails?

提问人:Shay. 提问时间:11/10/2023 最后编辑:Shay. 更新时间:11/10/2023 访问量:35

问:

在生产环境中,我的 Rails 应用程序 (Rails 7.0) 位于处理 SSL 的 CDN 后面。SSL 在将私有 VPC 中的请求发送到我的应用程序之前在 CDN 终止,该应用程序配置为不安全,因为它未向公共 Internet 公开。

在大多数情况下,这不会影响 Rails URL 帮助程序 - 只要我使用路径帮助程序而不是 URL 帮助程序来导航站点,它就会在链接之间维护协议。但是,Rails 中有一些地方,例如 ActiveStorage 直接上传库,其中 Rails 对内部生成的 URL 助手的使用进行了硬编码(特别是)。由于我的应用在内部配置为不安全,因此这些 URL 是使用该协议生成的,并且由于安全设置,大多数浏览器会拒绝向它们发出的请求。这完全破坏了直接上传,我找不到一种方法来更改这些 URL 的生成方式,因为我无法访问它们的路由配置。httpsrails_direct_uploads_urlhttp://

我尝试设置默认 URL 选项 (),这不会影响生成的 URL。Rails.application.routes.default_url_options[:protocol] = 'https'

我尝试直接在初始值设定项中更新路由对象中的默认值,如下所示:

ActiveSupport.on_load(:action_controller) do
  Rails.application.routes.named_routes.get(:rails_direct_uploads).defaults[:protocol] = 'https'
end

它们似乎是为每个请求动态生成的,也许吧?这会导致帮助程序在控制台中执行此操作时生成 HTTPS URL,但当我通过初始值设定项在应用程序中运行实际页面上时,它不会更改在实际页面上生成的 URL。

设置对此不起作用,因为内部 Rails 控制器不继承自 。default_url_optionsActionControllerActionController

ruby-on-rails https rails-activestorage 操作视图

评论

0赞 Shay. 11/11/2023
在评论中更新:由于与加载顺序相关的问题,我尝试更改的设置似乎在生产中不起作用。如果禁用预先加载,则更改上述设置会成功更改路由协议,即使类缓存处于打开状态也是如此。

答: 暂无答案