我的子文件夹安装在 Firefox 控制台中不断报错,提示无法找到 source maps。
Source map error: request failed with status 404 Resource URL: [https://redacted.com/community/assets/admin-…1d82fc1b0c7d1f24b7b71256a4eb4860f1aa96444925a361d8c24425c.js](https://redacted.com/community/assets/admin-e1c3cbc1d82fc1b0c7d1f24b7b71256a4eb4860f1aa96444925a361d8c24425c.js) Source Map URL: /assets/admin-e1c3cbc1d82fc1b0c7d1f24b7b71256a4eb4860f1aa96444925a361d8c24425c.js.map
如您所见,source map URL 中缺少了 /community 路径前缀。
于是我进行了一些排查。
lib/tasks/assets.rake 中有如下代码:
assets = cdn_relative_path("/assets")
source_map_root = assets + ((d = File.dirname(from)) == "." ? "" : "/#{d}")
而 lib/global_path.rb 中的 cdn_relative_path 方法如下:
module GlobalPath
def path(p)
"#{GlobalSetting.relative_url_root}#{p}"
end
def cdn_path(p)
GlobalSetting.cdn_url.blank? ? p : "#{GlobalSetting.cdn_url}#{path(p)}"
end
def upload_cdn_path(p)
if SiteSetting.Upload.s3_cdn_url.present?
p = Discourse.store.cdn_url(p)
end
(p =~ /^http/ || p =~ /^\/\//) ? p : cdn_path(p)
end
def cdn_relative_path(path)
if (cdn_url = GlobalSetting.cdn_url).present?
URI.parse(cdn_url).path + path
else
path
end
end
如您所见,cdn_path 和 upload_cdn_path 最终都会调用 path 方法,从而确保添加了子文件夹前缀。然而,cdn_relative_path 并没有调用 path 方法,它只是直接返回其参数(参数名为 path)。
顺便一提,我认为 cdn_path 在三元表达式的中间部分也应该返回 path(p) 吗?