子文件夹安装中的源映射路径错误

我的子文件夹安装在 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_pathupload_cdn_path 最终都会调用 path 方法,从而确保添加了子文件夹前缀。然而,cdn_relative_path 并没有调用 path 方法,它只是直接返回其参数(参数名为 path)。

顺便一提,我认为 cdn_path 在三元表达式的中间部分也应该返回 path(p) 吗?

1 个赞

@sam 是源映射方面的专家

@david 过去曾折腾过这个问题,但没错,为 CDN 加子目录正确配置路径并不容易。我欢迎能修复此问题的 PR,前提是它仅针对你的特定组合,且不会破坏当前任何正常工作的部分。

3 个赞

@sam 针对这个源映射错误的问题,我们有什么解决方案吗?我在子目录安装和 Fastly CDN 环境下也遇到了同样的问题。

我的建议是稍作等待,我们正迁移至 Ember CLI,它将取代整个流水线。

2 个赞

@sam 我们什么时候迁移到 Ember CLI?我们在子目录安装和 Fastly CDN 方面遇到了同样的问题。

此迁移正在进行中,您现在即可使用 Ember CLI 在本地进行开发,预计还需数月时间完成。

2 个赞

我认为这应该用 ember-cli 来解决?@david 你知道是不是这样吗?

2 个赞

在过去的几周里,我对 source-map 进行了多项改进,这些改进同时适用于“旧版”和 Ember-CLI 管道。

我检查了我们在 tests-passed 上托管的一个子文件夹站点,情况似乎有了很大改善 :ok_hand:

5 个赞

此主题已在 12 天后自动关闭。不再允许回复。