Rails ActiveStorage rails_blob_path生成无效的URL,并且在开始时缺少/ rails

我在: 滑轨:6.0.1
Ruby:2.6.5

我正在其中一个序列化程序中使用 Rails.application.routes.url_helpers.rails_blob_path 帮助程序来生成pdf文件的路径。它在开发中一直表现出色。生成网址,例如: /rails/active_storage/blobs/:signed_id/*filename
如预期的那样。

但是在生产中,同一助手会以以下格式产生错误的url:
/active_storage/blobs/:signed_id/*filename
注意开始时缺少的/rails部分。

当访问该URL时,这显然不会导致路由匹配错误。

我一直在努力寻找并寻找线索,我暂时将关注者添加到了我的routes.rb

get '/active_storage/blobs/:signed_id/*filename',to: 'active_storage/blobs#show'

我知道这只是一个hack,但目前可以使用。我正在寻找真正的原因并解决这个问题。

rennig 回答:Rails ActiveStorage rails_blob_path生成无效的URL,并且在开始时缺少/ rails

所以我在进行一些尝试,我注意到这在我的生产控制台中正在发生:

Rails.application.routes.url_helpers.url_for(Record.last.file)
=> "https://mywebsite.com//rails/active_storage/blobs/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBDQT09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--8994a079b16e683a18ef1be83a6ae7f5c3/filename.pdf"

请注意//rails部分,该部分无效,因为它具有双斜杠。这将我引向解决方案。

解决方案

我在config/environment.rb文件中有此文件:

Rails.application.default_url_options = Rails.application.config.action_mailer.default_url_options

production.rb中的默认网址选项如下:

config.action_mailer.default_url_options = { host: ENV['SERVER_URL'] }

SERVER_BASE_URL是元凶,当我将其更改为https://mywebsite.com/并重新启动服务器时,它设置为:https://mywebsite.com。轰!

尽管对我来说还不是很清楚,为什么这样的行为以及这是否是错误的原因。但是经过数小时的努力,这才对我有用。

本文链接:https://www.f2er.com/2988178.html

大家都在问