# 升级页面完全空白

**URL:** https://meta.discourse.org/t/totally-blank-upgrades-page/167416
**Category:** Bug
**Created:** [2020年十月16日 23:55 UTC](https://meta.discourse.org/t/totally-blank-upgrades-page/167416 "2020-10-16T23:55:42Z")
**Posts on this page:** 20
**Page:** 1

<div class="post-metadata">

### Author: ![paulrudy](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/paulrudy/32/259901_2.png) [@paulrudy](https://meta.discourse.org/u/paulrudy)
#### Post date: [2020年十月16日 23:55 UTC](https://meta.discourse.org/t/totally-blank-upgrades-page/167416/1 "2020-10-16T23:55:42Z")

</div>

我的升级页面完全空白。

我执行了 `./launcher rebuild app` 并成功升级到 v2.6.0beta4，但即使如此，升级页面仍然是空白的。该页面的 `<body>` 标签如下：

```html
<body class="highlighter-context">

</body>

```

有什么建议吗？

---

<div class="post-metadata">

### Author: ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### Post date: [2020年十月17日 00:41 UTC](https://meta.discourse.org/t/totally-blank-upgrades-page/167416/2 "2020-10-17T00:41:08Z")

</div>

可以分享一下您网站的链接吗？

---

<div class="post-metadata">

### Author: ![paulrudy](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/paulrudy/32/259901_2.png) [@paulrudy](https://meta.discourse.org/u/paulrudy)
#### Post date: [2020年十月17日 02:05 UTC](https://meta.discourse.org/t/totally-blank-upgrades-page/167416/3 "2020-10-17T02:05:20Z")

</div>

这是一个封闭的论坛。我很乐意分享，但我认为这会有所不同，对吧？

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [2020年十月19日 04:46 UTC](https://meta.discourse.org/t/totally-blank-upgrades-page/167416/4 "2020-10-19T04:46:44Z")

</div>

我建议您移除所有第三方插件并重新构建。同时，请尝试安全模式，详见：

> [@Using Safe Mode to troubleshoot issues with themes and plugins](https://meta.discourse.org/t/how-to-use-discourse-safe-mode/53504):
>
> bookmark This guide explains how to use Discourse’s [Safe Mode](https://meta.discourse.org/t/53504?silent=true) to troubleshoot issues with themes and plugins. person_raising_hand Required user level: All users Discourse offers a “JavaScript [Safe Mode](https://meta.discourse.org/t/53504?silent=true)” that allows any user to isolate the root cause of JavaScript issues caused by plugins, themes, or theme components. This feature is particularly useful for troubleshooting problems on your Discourse site. Accessing [Safe Mode](https://meta.discourse.org/t/53504?silent=true) To access [Safe Mode](https://meta.discourse.org/t/53504?silent=true), follow these steps: Open a new browse…

---

<div class="post-metadata">

### Author: ![paulrudy](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/paulrudy/32/259901_2.png) [@paulrudy](https://meta.discourse.org/u/paulrudy)
#### Post date: [2020年十月21日 06:01 UTC](https://meta.discourse.org/t/totally-blank-upgrades-page/167416/5 "2020-10-21T06:01:48Z")

</div>

> [@sam](#):
>
> 我建议你移除所有第三方插件并重新构建。另外，尝试安全模式。

谢谢。我有时间尝试了这些方法。安全模式下的各种选项都无济于事。禁用所有第三方插件并仅保留 docker\_manager 也没有任何改变。仍然是一片空白白屏。

我看到今年早些时候有一个[类似问题的帖子](https://meta.discourse.org/t/admin-upgrade-page-does-not-exist/157180)，但发帖人（OP）不再回复，因此没有明显的起因或解决方案。

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [2020年十月21日 06:11 UTC](https://meta.discourse.org/t/totally-blank-upgrades-page/167416/6 "2020-10-21T06:11:40Z")

</div>

我建议您发布一个经过脱敏处理的 app.yml 文件……这将有助于我们找出问题所在。

---

<div class="post-metadata">

### Author: ![paulrudy](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/paulrudy/32/259901_2.png) [@paulrudy](https://meta.discourse.org/u/paulrudy)
#### Post date: [2020年十月21日 06:42 UTC](https://meta.discourse.org/t/totally-blank-upgrades-page/167416/7 "2020-10-21T06:42:38Z")

</div>

好的，这是您需要的文件：

```yaml
## 这是 Discourse 一体化独立 Docker 容器模板
##
## 修改此文件后，您必须重新构建
## /var/discourse/launcher rebuild app
##
## 编辑时请*非常*小心！
## YAML 文件对空白或缩进错误极其敏感！
## 如有需要，请访问 http://www.yamllint.com/ 验证此文件

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## 如果您想添加 Let's Encrypt (https)，请取消注释以下两行
# - "templates/web.ssl.template.yml"
# - "templates/web.letsencrypt.ssl.template.yml"
  - "templates/web.socketed.template.yml"

## 此容器应暴露哪些 TCP/IP 端口？
## 如果您希望 Discourse 与另一个 Web 服务器（如 Apache 或 nginx）共享端口，
## 请参阅 https://meta.discourse.org/t/17247 获取详细信息
expose:
# - "80:80" # http
# - "443:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## 将 db_shared_buffers 设置为总内存的最大 25%。
  ## 将基于检测到的 RAM 由 bootstrap 自动设置，您也可以覆盖它
  db_shared_buffers: "128MB"

  ## 可以提高排序性能，但会增加每个连接的内存使用量
  #db_work_mem: "40MB"

  ## 此容器应使用哪个 Git 版本？（默认：tests-passed）
  #version: tests-passed

env:
  LANG: en_US.UTF-8
  # DISCOURSE_DEFAULT_LOCALE: en

  ## 支持多少并发 Web 请求？取决于内存和 CPU 核心数。
  ## 将基于检测到的 CPU 由 bootstrap 自动设置，您也可以覆盖它
  UNICORN_WORKERS: 2

  ## TODO: 此 Discourse 实例将响应的域名
  ## 必填项。Discourse 无法在裸 IP 地址上运行。
  DISCOURSE_HOSTNAME: <REMOVED FOR PUBLIC POSTING>

  ## 如果您希望容器使用与上述相同的
  ## 主机名（-h 选项）启动，请取消注释（默认 "$hostname-$config"）
  #DOCKER_USE_HOSTNAME: true

  ## TODO: 初始注册时将设为管理员和开发人员的逗号分隔电子邮件列表
  ## 示例 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: <REMOVED FOR PUBLIC POSTING>

  ## TODO: 用于验证新账户和发送通知的 SMTP 邮件服务器
  # SMTP 地址、用户名和密码为必填项
  # 警告：SMTP 密码中的字符 '#' 可能导致问题！
  DISCOURSE_SMTP_ADDRESS: smtp.mailgun.org
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: <REMOVED FOR PUBLIC POSTING>
  DISCOURSE_SMTP_PASSWORD: <REMOVED FOR PUBLIC POSTING>
  DISCOURSE_SMTP_ENABLE_START_TLS: true # (可选，默认为 true)

  ## 如果您添加了 Let's Encrypt 模板，请取消注释以下行以获取免费 SSL 证书
  LETSENCRYPT_ACCOUNT_EMAIL: <REMOVED FOR PUBLIC POSTING>

  ## 此 Discourse 实例的 http 或 https CDN 地址（配置为拉取）
  ## 详见 https://meta.discourse.org/t/14857
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com

  # S3 设置
  DISCOURSE_CDN_URL: <REMOVED FOR PUBLIC POSTING>
  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: "us-west-002"
  DISCOURSE_S3_ENDPOINT: https://s3.us-west-002.backblazeb2.com
  DISCOURSE_S3_ACCESS_KEY_ID: <REMOVED FOR PUBLIC POSTING>
  DISCOURSE_S3_SECRET_ACCESS_KEY: <REMOVED FOR PUBLIC POSTING>
  DISCOURSE_S3_CDN_URL: <REMOVED FOR PUBLIC POSTING>
  DISCOURSE_S3_BUCKET: <REMOVED FOR PUBLIC POSTING>
  DISCOURSE_S3_BACKUP_BUCKET: <REMOVED FOR PUBLIC POSTING>
  DISCOURSE_BACKUP_LOCATION: s3
  DISCOURSE_S3_INSTALL_CORS_RULE: false

## Docker 容器是无状态的；所有数据都存储在 /shared 中
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## 插件请放在此处
## 详见 https://meta.discourse.org/t/19157
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/discourse-user-notes
          - git clone https://github.com/discourse/discourse-assign
          - git clone https://github.com/discourse/discourse-policy
          - git clone https://github.com/discourse/discourse-tooltips
          - git clone https://github.com/discourse/discourse-saved-searches
          - git clone https://github.com/discourse/discourse-knowledge-explorer
          - git clone https://github.com/discourse/discourse-voting
          - git clone https://github.com/discourse/discourse-translator
          - git clone https://github.com/angusmcleod/discourse-elections
          - git clone https://github.com/discourse/discourse-styleguide
          - git clone https://github.com/Ahmedgagan/discourse-custom-trust-level
          - git clone https://github.com/paviliondev/discourse-quick-messages
          - git clone https://github.com/paviliondev/discourse-locations
          - git clone https://github.com/discourse/discourse-calendar

  # 对象存储
  after_assets_precompile:
    - exec:
        cd: $home
        cmd:
          - su discourse -c 'bundle exec rake s3:upload_assets'

## 构建后运行的任何自定义命令
run:
  - exec: echo "开始自定义命令"
  ## 如果您想为首次注册设置“发件人”电子邮件地址，请取消注释并修改：
  ## 收到首次注册邮件后，请重新注释该行。它只需运行一次。
  #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
  - exec: echo "自定义命令结束"

```

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [2020年十月21日 06:45 UTC](https://meta.discourse.org/t/totally-blank-upgrades-page/167416/8 "2020-10-21T06:45:22Z")

</div>

好的……我建议第一步是重建这个系统，不安装任何第三方插件。只保留 `/discourse/discourse` 路径下的插件。

如果这样能正常工作，你就可以通过二分法找出是哪个插件导致了问题。

---

<div class="post-metadata">

### Author: ![paulrudy](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/paulrudy/32/259901_2.png) [@paulrudy](https://meta.discourse.org/u/paulrudy)
#### Post date: [2020年十月21日 07:23 UTC](https://meta.discourse.org/t/totally-blank-upgrades-page/167416/9 "2020-10-21T07:23:37Z")

</div>

好吧，docker\_manage 插件并不是 `discourse/discourse` 路径，但禁用它后，`...admin/upgrade` 页面就不存在了。

仅启用 docker\_manage 插件会导致升级页面同样显示为空白。

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [2020年十月21日 08:09 UTC](https://meta.discourse.org/t/totally-blank-upgrades-page/167416/10 "2020-10-21T08:09:05Z")

</div>

[GitHub - discourse/docker\_manager: Plugin for use with discourse docker image · GitHub](https://github.com/discourse/docker_manager) ？

---

<div class="post-metadata">

### Author: ![paulrudy](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/paulrudy/32/259901_2.png) [@paulrudy](https://meta.discourse.org/u/paulrudy)
#### Post date: [2020年十月21日 10:06 UTC](https://meta.discourse.org/t/totally-blank-upgrades-page/167416/11 "2020-10-21T10:06:33Z")

</div>

抱歉，你是对的，我一定是产生幻觉了。忽略刚才的说法，它确实在 `discourse/` 路径下。

不过无论如何，仍然显示为空白白屏。

---

<div class="post-metadata">

### Author: ![paulrudy](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/paulrudy/32/259901_2.png) [@paulrudy](https://meta.discourse.org/u/paulrudy)
#### Post date: [2020年十一月1日 22:57 UTC](https://meta.discourse.org/t/totally-blank-upgrades-page/167416/12 "2020-11-01T22:57:09Z")

</div>

尽管 2.6.0.beta5 已可用（我目前使用的是 2.6.0.beta4），我仍然遇到升级页面空白的问题。我已尝试禁用插件但未能解决，如有任何进一步的建议，我将不胜感激。

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [2020年十一月2日 04:56 UTC](https://meta.discourse.org/t/totally-blank-upgrades-page/167416/13 "2020-11-02T04:56:29Z")

</div>

请查看 Chrome 开发者工具，当页面显示为白色时，控制台是否有报错？我猜这可能与你的 CSP（内容安全策略）有关。

---

<div class="post-metadata">

### Author: ![paulrudy](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/paulrudy/32/259901_2.png) [@paulrudy](https://meta.discourse.org/u/paulrudy)
#### Post date: [2020年十一月2日 17:12 UTC](https://meta.discourse.org/t/totally-blank-upgrades-page/167416/14 "2020-11-02T17:12:55Z")

</div>

谢谢，你说得对——它拒绝加载来自我 CDN 的脚本。已对 URL 进行脱敏处理：

`upgrade:1 拒绝加载脚本 'https://cdn-to-discourse.b-cdn.net/assets/docker-manager-app-32418f2f7cd50e6f4a0b8d13badc4e59f6a1ad74e7bed270f3a051478fed773d.js'，因为它违反了以下内容安全策略（Content Security Policy）指令："script-src https://forum.example.com/logs/ https://forum.example.com/sidekiq/ https://forum.example.com/mini-profiler-resources/ https://cdn-to-s3.b-cdn.net/assets/ https://cdn-to-s3.b-cdn.net/brotli_asset/ https://forum.example.com/extra-locales/ https://cdn-to-discourse.b-cdn.net/highlight-js/ https://cdn-to-discourse.b-cdn.net/javascripts/ https://cdn-to-discourse.b-cdn.net/plugins/ https://cdn-to-discourse.b-cdn.net/theme-javascripts/ https://cdn-to-discourse.b-cdn.net/svg-sprite/ https://matomo.example.com"。请注意，'script-src-elem' 未显式设置，因此回退使用 'script-src'。`

安全设置页面显示“当前主机和 CDN 已默认包含”。我是否仍需手动将 CDN 添加到白名单中？

---

<div class="post-metadata">

### Author: ![paulrudy](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/paulrudy/32/259901_2.png) [@paulrudy](https://meta.discourse.org/u/paulrudy)
#### Post date: [2020年十一月2日 17:59 UTC](https://meta.discourse.org/t/totally-blank-upgrades-page/167416/15 "2020-11-02T17:59:33Z")

</div>

我注意到有一个相同的问题在[此处](https://meta.discourse.org/t/admin-upgrade-page-doesnt-load-with-a-cdn/160213)被提出，但关于默认白名单为何不起作用，最终尚未给出答案。

---

<div class="post-metadata">

### Author: ![Don](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/don/32/228726_2.png) [@Don](https://meta.discourse.org/u/Don)
#### Post date: [2020年十一月2日 18:33 UTC](https://meta.discourse.org/t/totally-blank-upgrades-page/167416/16 "2020-11-02T18:33:32Z")

</div>

你好，

我认为你应该将此 URL 添加到管理员 CSP 设置（内容安全策略脚本源）中：

`https://cdn-to-discourse.b-cdn.net/assets/`

 ![Screen Shot 2020-11-02 at 7.30.47 PM](https://global.discourse-cdn.com/meta/original/3X/9/1/9165cd8af6aa5fa1c25764436258da7849e3c418.png)

之后请再次检查 Chrome 开发者工具中的错误。

---

<div class="post-metadata">

### Author: ![paulrudy](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/paulrudy/32/259901_2.png) [@paulrudy](https://meta.discourse.org/u/paulrudy)
#### Post date: [2020年十一月2日 18:45 UTC](https://meta.discourse.org/t/totally-blank-upgrades-page/167416/17 "2020-11-02T18:45:49Z")

</div>

是的，这样可行。不过我很好奇，为什么默认的白名单功能没有自动执行此操作。

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [2020年十一月3日 00:37 UTC](https://meta.discourse.org/t/totally-blank-upgrades-page/167416/18 "2020-11-03T00:37:46Z")

</div>

我也很好奇，你们的 CDN 是如何配置的？我们可能漏掉了 docker-manager 插件的一些关键配置。

cc @pmusaraj

---

<div class="post-metadata">

### Author: ![pmusaraj](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pmusaraj/32/119489_2.png) [@pmusaraj](https://meta.discourse.org/u/pmusaraj)
#### Post date: [2020年十一月4日 17:30 UTC](https://meta.discourse.org/t/totally-blank-upgrades-page/167416/20 "2020-11-04T17:30:52Z")

</div>

> [@sam](#):
>
> 我们可能确实遗漏了 docker-manager 插件中的一些关键配置。

是的，确实如此。docker\_manager 插件在模板中使用 `javascript_include_tag` 加载了两个 JS 文件，而该标签无法识别 `DISCOURSE_S3_CDN_URL`，因此默认回退到 `DISCOURSE_CDN_URL`，从而触发了 CSP 限制。

现已通过 [FIX: blank upgrade page when using S3 CDN and CSP · discourse/docker\_manager@3d37fd6 · GitHub](https://github.com/discourse/docker_manager/commit/3d37fd64ed8acbc415e7d7ad6de4de35bcb060fb) 修复。

@paulrudy 如果你更新了 docker\_manager 插件，就不再需要手动将 `https://cdn-to-discourse.b-cdn.net/assets/` 添加到你的 CSP 中。

---

<div class="post-metadata">

### Author: ![paulrudy](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/paulrudy/32/259901_2.png) [@paulrudy](https://meta.discourse.org/u/paulrudy)
#### Post date: [2020年十一月4日 18:29 UTC](https://meta.discourse.org/t/totally-blank-upgrades-page/167416/21 "2020-11-04T18:29:20Z")

</div>

> [@pmusaraj](#):
>
> @paulrudy 如果你更新了 docker\_manager 插件，就不再需要手动将 `https://cdn-to-discourse.b-cdn.net/assets/` 添加到你的 CSP 中了。

这确实解决了问题！感谢 @sam 和 @pmusaraj。

[下一頁](https://meta.discourse.org/t/totally-blank-upgrades-page/167416.md?page=2)
