서브폴더 설치 환경에서 Firefox 콘솔에 소스 맵을 찾을 수 없다는 오류가 계속 발생했습니다.
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
보시다시피, 소스 맵 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)를 반환해야 하는 것 같습니다.