DISCOURSE_CDN_URL 导致重建/恢复失败

EDIT: Well, it took me 18 hours, but it seems that defining DISCOURSE_CDN_URL keeps (at least) this site from rebuilding and/or functioning after a restore. I guess the next thing to test is doing a build without DISCOURSE_CDN_URL and then cranking up the container with the ENV var set.

What I knew before

I had this problem yesterday but thought it went away, but it turns out that I restored a month-old database. Restoring the recent database kills the site.

I was able to build the site from scratch, so it’s not a problem with the code or any standard plugins. BUT after I have restored the database, the site is down, and I can’t do a rebuild, even if I delete the database, so I guess the problem is something in a file that gets read when it’s compressing the javascript.

I tried removing all of the background: image-url in onebox.scss, which allowed the site to rebuild, but the display is all screwed up, so those errors are a symptom rather than the cause of the problem.

I get errors like the below in the rails log after restoring the database (and files) or when rebuilding.


I, [2019-12-22T21:21:25.532604 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate'
NOTE: Inheriting Faraday::Error::ClientError is deprecated; use Faraday::ClientError instead. It will be removed in or after version 1.0
Faraday::Error::ClientError.inherited called from /var/www/discourse/plugins/discourse-github/gems/2.6.5/gems/octokit-4.14.0/lib/octokit/middleware/follow_redirects.rb:14.
> Seeding dark and light themes
[SassC::FunctionsHandler] undefined method `protocol' for nil:NilClass
rake aborted!
Discourse::ScssError: Error: error in C function image-url: undefined method `protocol' for nil:NilClass
        on line 90 of app/assets/stylesheets/common/base/onebox.scss, in function `image-url`
        from line 90 of app/assets/stylesheets/common/base/onebox.scss, in mixin `onebox-favicon`
        from line 110 of app/assets/stylesheets/common/base/onebox.scss
        from line 34 of app/assets/stylesheets/common.scss
        from line 1 of desktop.scss
>>     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

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

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

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

调试花了整整两个小时 :smiley:

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

如果您未添加协议,将弹出警告:

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

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

我也觉得自己掉进这个陷阱很傻!:laughing:

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