DISCOURSE_CDN_URL casse la reconstruction/restauration

EDIT : Bon, cela m’a pris 18 heures, mais il semble que la définition de DISCOURSE_CDN_URL empêche (au moins) ce site de se reconstruire et/ou de fonctionner après une restauration. Je pense que la prochaine chose à tester est de procéder à une construction sans DISCOURSE_CDN_URL, puis de démarrer le conteneur avec la variable d’environnement définie.

Ce que je savais avant

J’ai rencontré ce problème hier, mais je pensais qu’il avait disparu. Il s’avère que j’ai restauré une base de données vieille d’un mois. La restauration de la base de données récente tue le site.

J’ai pu construire le site à partir de zéro, donc ce n’est pas un problème lié au code ou aux plugins standard. MAIS après avoir restauré la base de données, le site est hors ligne et je ne peux pas effectuer de reconstruction, même si je supprime la base de données. Je suppose donc que le problème provient d’un fichier lu lors de la compression du JavaScript.

J’ai essayé de supprimer toutes les occurrences de background: image-url dans onebox.scss, ce qui a permis au site de se reconstruire, mais l’affichage est complètement désordonné. Ces erreurs sont donc un symptôme plutôt que la cause du problème.

J’obtiens des erreurs comme celle-ci dans le journal Rails après avoir restauré la base de données (et les fichiers) ou lors d’une reconstruction.


I, [2019-12-22T21:21:25.532604 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate'
NOTE : L'héritage de Faraday::Error::ClientError est déprécié ; utilisez Faraday::ClientError à la place. Il sera supprimé dans ou après la version 1.0.
Faraday::Error::ClientError.inherited appelé depuis /var/www/discourse/plugins/discourse-github/gems/2.6.5/gems/octokit-4.14.0/lib/octokit/middleware/follow_redirects.rb:14.
> Sémencage des thèmes sombre et clair
[SassC::FunctionsHandler] méthode `protocol` non définie pour nil:NilClass
rake aborted !
Discourse::ScssError : Erreur : erreur dans la fonction C image-url : méthode `protocol` non définie pour nil:NilClass
        sur la ligne 90 de app/assets/stylesheets/common/base/onebox.scss, dans la fonction `image-url`
        depuis la ligne 90 de app/assets/stylesheets/common/base/onebox.scss, dans le mixin `onebox-favicon`
        depuis la ligne 110 de app/assets/stylesheets/common/base/onebox.scss
        depuis la ligne 34 de app/assets/stylesheets/common.scss
        depuis la ligne 1 de 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 Je viens tout juste de tomber sur exactement le même problème, après avoir lutté contre mes autres difficultés lors de la configuration de S3. Avez-vous fini par découvrir ce qui en était la cause ?

C’est réglé. Assurez-vous de préfixer votre URL CDN par http:// :facepalm:

Donc, au lieu de DISCOURSE_CDN_URL=votre-url-cdn.com, cela devrait être DISCOURSE_CDN_URL=http://votre-url-cdn.com.

Seulement 2 heures perdues à déboguer ça :smiley:

Hum, pourrions-nous ajouter une sorte d’avertissement ici @eviltrout afin que les gens ne tombent pas sur ce problème à l’avenir ?

Cela affichera un avertissement si vous n’ajoutez pas de protocole :

Mais les idiots (comme moi) qui font cela avec des variables d’environnement auront toujours des problèmes. Y a-t-il un inconvénient à afficher l’avertissement et à préfixer avec https:// ?

GlobalSetting est l’objet qui récupère vos variables ENV dans Discourse, donc si vous le faites de cette manière, l’avertissement devrait également apparaître.

Je me sens aussi assez bête d’être tombé dans ce piège ! :laughing:

Si je me souviens bien, j’ai perdu 18 heures dessus pendant ce qui devait être des vacances de Noël. :frowning_face: