# DISCOURSE\_CDN\_URL 导致重建/恢复失败

**URL:** https://meta.discourse.org/t/discourse-cdn-url-breaks-rebuild-restore/136844
**Category:** Support
**Created:** [2019年十二月22日 21:34 UTC](https://meta.discourse.org/t/discourse-cdn-url-breaks-rebuild-restore/136844 "2019-12-22T21:34:57Z")
**Posts on this page:** 11
**Page:** 1

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [2019年十二月22日 21:34 UTC](https://meta.discourse.org/t/discourse-cdn-url-breaks-rebuild-restore/136844/1 "2019-12-22T21:34:57Z")

</div>

编辑：好吧，花了我 18 个小时，但看起来定义 DISCOURSE\_CDN\_URL 会导致（至少）此站点在恢复后无法重建和/或正常运行。我想接下来要测试的是在不设置 `DISCOURSE_CDN_URL` 的情况下进行构建，然后设置该环境变量再启动容器。

### 我之前了解的情况

我昨天就遇到了这个问题，以为已经解决了，但结果是我恢复了一个一个月前的数据库。恢复最近的数据库会导致站点崩溃。

我能够从零开始构建站点，所以问题不在代码或任何标准插件上。但是，在我恢复数据库后，站点就宕机了，即使删除数据库也无法进行重建。因此，我推测问题出在压缩 JavaScript 时读取的某个文件中。

我尝试移除 `onebox.scss` 中所有的 `background: image-url`，这使得站点能够重建，但显示效果完全乱了。所以这些错误只是问题的症状，而非根本原因。

在恢复数据库（和文件）或重建时，我在 Rails 日志中看到了如下错误：

```plaintext

I, [2019-12-22T21:21:25.532604 #1] INFO -- : > cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate'
注意：继承 Faraday::Error::ClientError 已弃用；请使用 Faraday::ClientError。该用法将在 1.0 版本或之后被移除。
Faraday::Error::ClientError.inherited 调用自 /var/www/discourse/plugins/discourse-github/gems/2.6.5/gems/octokit-4.14.0/lib/octokit/middleware/follow_redirects.rb:14。
> 正在生成深色和浅色主题
[SassC::FunctionsHandler] nil:NilClass 没有 `protocol` 方法
rake 中止！
Discourse::ScssError: 错误：C 函数 image-url 出错：nil:NilClass 没有 `protocol` 方法
        位于 app/assets/stylesheets/common/base/onebox.scss 第 90 行，函数 `image-url` 中
        位于 app/assets/stylesheets/common/base/onebox.scss 第 90 行，混入 `onebox-favicon` 中
        位于 app/assets/stylesheets/common/base/onebox.scss 第 110 行
        位于 app/assets/stylesheets/common.scss 第 34 行
        位于 desktop.scss 第 1 行
>>> background: image-url("favicons/#{$image}.png") no-repeat 0% 50%;

   ----------------^
/var/www/discourse/lib/stylesheet/manager.rb:183:in `rescue in compile'
/var/www/discourse/lib/stylesheet/manager.rb:171:in `compile'
/var/www/discourse/lib/stylesheet/manager.rb:80:in `block (2 levels) in stylesheet_details'
/var/www/discourse/lib/stylesheet/manager.rb:66:in `each'
/var/www/discourse/lib/stylesheet/manager.rb:66:in `block in stylesheet_details'
/var/www/discourse/lib/stylesheet/manager.rb:64:in `synchronize'
/var/www/discourse/lib/stylesheet/manager.rb:64:in `stylesheet_details'
/var/www/discourse/lib/stylesheet/manager.rb:34:in `stylesheet_data'
/var/www/discourse/app/models/theme.rb:280:in `block in refresh_message_for_targets'
/var/www/discourse/app/models/theme.rb:279:in `map'
/var/www/discourse/app/models/theme.rb:279:in `refresh_message_for_targets'
/var/www/discourse/app/models/theme.rb:267:in `notify_theme_change'
/var/www/discourse/app/models/theme.rb:275:in `notify_theme_change'
/var/www/discourse/app/models/theme.rb:61:in `block in <class:Theme>'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/callbacks.rb:429:in `instance_exec'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/callbacks.rb:429:in `block in make_lambda'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/callbacks.rb:239:in `block in halting_and_conditional'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/callbacks.r

```

---

<div class="post-metadata">

### Author: ![jamesmarkcook](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jamesmarkcook/32/168563_2.png) [@jamesmarkcook](https://meta.discourse.org/u/jamesmarkcook)
#### Post date: [2020年三月5日 09:44 UTC](https://meta.discourse.org/t/discourse-cdn-url-breaks-rebuild-restore/136844/2 "2020-03-05T09:44:22Z")

</div>

@pfaffman 我刚刚在解决配置 S3 时遇到的其他问题后，也发现了完全相同的问题。你后来找出导致这个问题的原因了吗？

---

<div class="post-metadata">

### Author: ![jamesmarkcook](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jamesmarkcook/32/168563_2.png) [@jamesmarkcook](https://meta.discourse.org/u/jamesmarkcook)
#### Post date: [2020年三月5日 11:38 UTC](https://meta.discourse.org/t/discourse-cdn-url-breaks-rebuild-restore/136844/3 "2020-03-05T11:38:47Z")

</div>

已修复。请确保在 CDN URL 前加上 `http://` :facepalm:

因此，不应是 `DISCOURSE_CDN_URL=your-cdn-url.com`，而应是 `DISCOURSE_CDN_URL=http://your-cdn-url.com`。

调试花了整整两个小时 😃

---

<div class="post-metadata">

### Author: ![codinghorror](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/codinghorror/32/110067_2.png) [@codinghorror](https://meta.discourse.org/u/codinghorror)
#### Post date: [2020年三月5日 19:44 UTC](https://meta.discourse.org/t/discourse-cdn-url-breaks-rebuild-restore/136844/4 "2020-03-05T19:44:53Z")

</div>

嗯，我们能不能在这里加个警告，@eviltrout，这样大家以后就不会遇到这个问题了？

---

<div class="post-metadata">

### Author: ![eviltrout](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/eviltrout/32/5275_2.png) [@eviltrout](https://meta.discourse.org/u/eviltrout)
#### Post date: [2020年三月5日 20:38 UTC](https://meta.discourse.org/t/discourse-cdn-url-breaks-rebuild-restore/136844/5 "2020-03-05T20:38:50Z")

</div>

如果您未添加协议，将弹出警告：

> <https://github.com/discourse/discourse/commit/9ab2a15691de4c280e234be8d50b0526b657db83>
>
> This can be confusing:
> https://meta.discourse.org/t/discourse-cdn-url-breaks-reb…uild-restore/136844

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [2020年三月5日 20:41 UTC](https://meta.discourse.org/t/discourse-cdn-url-breaks-rebuild-restore/136844/6 "2020-03-05T20:41:20Z")

</div>

但像我这样的笨蛋如果使用环境变量来做这件事，仍然会遇到麻烦。在打印警告的同时在 `https://` 前面加上前缀有什么坏处吗？

---

<div class="post-metadata">

### Author: ![eviltrout](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/eviltrout/32/5275_2.png) [@eviltrout](https://meta.discourse.org/u/eviltrout)
#### Post date: [2020年三月5日 20:43 UTC](https://meta.discourse.org/t/discourse-cdn-url-breaks-rebuild-restore/136844/7 "2020-03-05T20:43:07Z")

</div>

`GlobalSetting` 是负责将您的 `ENV` 变量引入 Discourse 的对象，因此如果您采用这种方式，警告信息也应该会出现。

---

<div class="post-metadata">

### Author: ![jamesmarkcook](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jamesmarkcook/32/168563_2.png) [@jamesmarkcook](https://meta.discourse.org/u/jamesmarkcook)
#### Post date: [2020年三月5日 20:45 UTC](https://meta.discourse.org/t/discourse-cdn-url-breaks-rebuild-restore/136844/8 "2020-03-05T20:45:47Z")

</div>

> [@pfaffman](#):
>
> 但是那些（像我这样的）笨蛋用环境变量这样做

我也觉得自己掉进这个陷阱很傻！😆

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [2020年三月5日 20:47 UTC](https://meta.discourse.org/t/discourse-cdn-url-breaks-rebuild-restore/136844/9 "2020-03-05T20:47:13Z")

</div>

如果我没记错的话，我本该在圣诞假期里度过，结果却花了 18 个小时在这上面。😞

---

<div class="post-metadata">

### Author: ![system](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/system/32/443519_2.png) [@system](https://meta.discourse.org/u/system)
#### Post date: [2024年二月19日 01:07 UTC](https://meta.discourse.org/t/discourse-cdn-url-breaks-rebuild-restore/136844/10 "2024-02-19T01:07:05Z")

</div>



---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [2024年二月19日 18:23 UTC](https://meta.discourse.org/t/discourse-cdn-url-breaks-rebuild-restore/136844/11 "2024-02-19T18:23:32Z")

</div>


