Rails ActiveStorage rails_blob_path 生成无效 url 且开始时缺少 /rails
Rails ActiveStorage rails_blob_path generating invalid url with missing /rails in start
我在:
Rails: 6.0.1
Ruby: 2.6.5
并且我在我的一个序列化程序中使用 Rails.application.routes.url_helpers.rails_blob_path
助手来生成 pdf 文件的路径。它在开发中一直运作良好。生成 url 如:
/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,但它现在有效。我正在寻找真正的原因并解决这个问题。
所以我正在做一些测试和试验,我注意到这发生在我的生产控制台中:
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
中的默认 url 选项看起来像:
config.action_mailer.default_url_options = { host: ENV['SERVER_URL'] }
SERVER_BASE_URL
是罪魁祸首,当我将其更改为 https://mywebsite.com
并重新启动服务器时,它被设置为:https://mywebsite.com/
。轰!
尽管我不是很清楚为什么会出现这种行为,以及这是否是一个错误。但经过数小时的努力,这对我有用。
我在:
Rails: 6.0.1
Ruby: 2.6.5
并且我在我的一个序列化程序中使用 Rails.application.routes.url_helpers.rails_blob_path
助手来生成 pdf 文件的路径。它在开发中一直运作良好。生成 url 如:
/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,但它现在有效。我正在寻找真正的原因并解决这个问题。
所以我正在做一些测试和试验,我注意到这发生在我的生产控制台中:
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
中的默认 url 选项看起来像:
config.action_mailer.default_url_options = { host: ENV['SERVER_URL'] }
SERVER_BASE_URL
是罪魁祸首,当我将其更改为 https://mywebsite.com
并重新启动服务器时,它被设置为:https://mywebsite.com/
。轰!
尽管我不是很清楚为什么会出现这种行为,以及这是否是一个错误。但经过数小时的努力,这对我有用。