DISCOURSE_CDN_URL interrumpe la reconstrucción/restauración

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 Acabo de tropezar con exactamente el mismo problema después de lidiar con mis otros problemas al intentar configurar S3. ¿Lograste averiguar qué lo estaba causando?

¡Lo solucioné! Asegúrate de que tu URL del CDN comience con http:// :facepalm:

Así que en lugar de DISCOURSE_CDN_URL=tu-url-cdn.com, debería ser DISCOURSE_CDN_URL=http://tu-url-cdn.com.

Solo 2 horas desperdiciadas depurándolo :smiley:

Hmm, ¿podemos añadir algún tipo de advertencia aquí, @eviltrout, para que la gente no se encuentre con esto en el futuro?

Esto mostrará una advertencia si no agregas un protocolo:

Pero los novatos (como yo) que hacen esto con variables de entorno seguirán teniendo problemas. ¿Hay alguna desventaja en imprimir la advertencia y anteponer https://?

GlobalSetting es el objeto que recibe tus variables de ENV en Discourse, por lo que si lo haces de esa manera, la advertencia también debería aparecer.

¡Yo también me siento bastante tonto por caer en esta trampa! :laughing:

Si no recuerdo mal, perdí 18 horas en eso durante lo que debería haber sido unas vacaciones de Navidad. :cara_triste: