Actifs Discourse manquants

Bonjour,

J’ai installé Discourse sur un serveur Fedora 31 en suivant le guide d’installation recommandé, mais j’ai utilisé Podman au lieu de Docker pour exécuter le conteneur. Tout s’est déroulé parfaitement ce matin lors de la configuration initiale. Cependant, j’ai rencontré des difficultés pour que le HTTP simple vers Nginx sur l’hôte fonctionne et j’ai dû utiliser les certificats SSL sur les deux instances Nginx. J’ai configuré Discourse et tout était en ordre.

J’ai ensuite décidé de reconstruire Discourse avec SSL désactivé et de l’exécuter sous un compte utilisateur non-root. Le HTTP simple vers l’hôte fonctionnait bien, mais j’ai obtenu une page blanche (le titre était correct et la favicon s’affichait).

J’ai vérifié le répertoire dans le conteneur :

root@xena-app:/var/www/discourse# ls public/assets -al
total 15640
drwxr-xr-x. 2 discourse discourse      10 Jan 11 13:54 .
drwxr-xr-x. 3 discourse discourse      29 Jan 11 13:57 ..
-rw-r--r--. 1 discourse discourse     595 Jan 11 13:49 _activate-account-7a1f8d46287194007ee607f79af56217e6e6238e4ca159c5da6974005a1254c5.js
-rw-r--r--. 1 discourse discourse     250 Jan 11 13:54 activate-account-7a1f8d46287194007ee607f79af56217e6e6238e4ca159c5da6974005a1254c5.js.br
-rw-r--r--. 1 discourse discourse     420 Jan 11 13:54 activate-account-7a1f8d46287194007ee607f79af56217e6e6238e4ca159c5da6974005a1254c5.js.gz
-rw-r--r--. 1 discourse discourse     695 Jan 11 13:54 activate-account-7a1f8d46287194007ee607f79af56217e6e6238e4ca159c5da6974005a1254c5.js.map
-rw-r--r--. 1 discourse discourse  990519 Jan 11 13:50 _admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js
-rw-r--r--. 1 discourse discourse   83903 Jan 11 13:54 admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js.br
-rw-r--r--. 1 discourse discourse  106465 Jan 11 13:54 admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js.gz
-rw-r--r--. 1 discourse discourse  366446 Jan 11 13:54 admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js.map
drwxr-xr-x. 2 discourse discourse    4096 Jan 11 13:54 admin-login
...

Les fichiers demandés sont effectivement absents, comme le confirme Nginx :

2020/01/11 13:59:49 [error] 60#60: *20 open() "/var/www/discourse/public/assets/plugins/poll-57c9059384e3daeaee3d974c985d85a2b8462bb2629eb0b1834451056d1e1459.js" failed (2: No such file or directory), client: 10.0.2.2, server: _, request: "GET /assets/plugins/poll-57c9059384e3daeaee3d974c985d85a2b8462bb2629eb0b1834451056d1e1459.js HTTP/1.0", host: "idlerpg.xyz", referrer: "https://idlerpg.xyz/"

Je pensais que cela pourrait être un problème lié à mon installation, car ces fichiers étaient présents sur l’ancienne installation ce matin, en tant que root sur l’hôte ! J’ai effacé le dossier partagé et reconstruit en tant qu’utilisateur non-root, avec les mêmes résultats à chaque fois. Ensuite, j’ai réessayé, cette fois en tant que root avec les mêmes paramètres que ce matin, et j’ai obtenu les mêmes problèmes.

Une installation non-root affiche toujours la page « Félicitations, vous avez installé Discourse ! », mais après avoir terminé l’installation, j’obtiens une page blanche car les fichiers d’actifs sont manquants.

Existe-t-il un moyen de corriger ce problème d’actifs manquants ?

Au cas où quelqu’un se demanderait si cela a vraiment fonctionné ce matin, voici une capture d’écran de mon mobile


Discourse ne me permet pas encore d’utiliser deux images dans un seul message :slight_smile:

J’ai changé cela en bug. Je n’arrive pas à obtenir une version avec tous les assets lors de la compilation des tests-passed.
J’ai essayé d’entrer dans le conteneur et d’exécuter rake assets:precompile, mais les mêmes assets sont toujours absents.

Il semble qu’après des tonnes de reconstructions, cela fonctionne maintenant par magie. Étrange.

Bonjour Adriany, bienvenue sur le forum.

D’après mes dernières informations, Docker est une exigence et non une option. Où as-tu vu ce nouveau guide d’installation ?

Je viens de remplacer Docker par Podman, cela fonctionne parfaitement. Leur syntaxe en ligne de commande est compatible.

D’accord, après quelques tests, je peux maintenant affirmer qu’il affiche toujours une page blanche après chaque reconstruction. Si j’exécute RAILS_ENV=production bin/rake assets:precompile, tout fonctionne ensuite. Je ne sais pas pourquoi, cela devrait les compiler lors d’une reconstruction de toute façon ?

Avez-vous vu ce sujet, et en particulier ce message, concernant l’incompatibilité de Podman avec Docker ?

En effet, cela fonctionne. Podman ne devrait pas influencer les fichiers qui seront le résultat de la précompilation initiale des ressources.

Lors de la phase de compilation des ressources de la reconstruction, voyez-vous des traces d’appel dans la sortie ?

Nous sommes là car quelque chose ne fonctionne pas. Ce qui devrait être et ce qui est sont deux états différents.

Vous affirmez avec assurance que Podman n’est pas en cause. Il serait bon de le prouver pour l’exclure clairement comme facteur. À ma connaissance, vous n’avez pas terminé la méthode d’installation officielle avec Docker pour voir si cela résout le problème.

Oui, je le fais.

I, [2020-01-12T20:58:31.800117 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle exec rake assets:precompile'
Suppression des fichiers temporaires
Regroupement des ressources
I, [2020-01-12T20:58:38.208107 #758]  INFO -- : Écriture de /var/www/discourse/public/assets/vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js
I, [2020-01-12T20:59:02.428630 #758]  INFO -- : Écriture de /var/www/discourse/public/assets/admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js
I, [2020-01-12T20:59:02.447192 #758]  INFO -- : Écriture de /var/www/discourse/public/assets/preload-store-d32dcf974dddcac742f8a7a6aa7fcd686185920b201029d0ecb2b85527ef9034.js
I, [2020-01-12T20:59:02.707559 #758]  INFO -- : Écriture de /var/www/discourse/public/assets/browser-update-1741a2ed67a367faeb0a582af064457e8b1b1354e52e6efcf8bf26301166dec8.js
I, [2020-01-12T20:59:02.753632 #758]  INFO -- : Écriture de /var/www/discourse/public/assets/break_string-cc617154cd957804f2f6a1f3bc68258c9cdca3d4b9a322bf777d145fed04790e.js
I, [2020-01-12T20:59:04.073148 #758]  INFO -- : Écriture de /var/www/discourse/public/assets/ember_jquery-c2cca4a19fd4c70eabc95b010a6d7643955ec2a2251aeb1d70f625773eebea21.js
I, [2020-01-12T20:59:06.303026 #758]  INFO -- : Écriture de /var/www/discourse/public/assets/pretty-text-bundle-fa6ea00e2000bf2f9ed3f069be9253477fed5e7290b5d109a3e2d9498ac70e81.js
... [snip]
108798.339928812 Compression : vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js
uglifyjs '/var/www/discourse/public/assets/_vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js' -m -c -o '/var/www/discourse/public/assets/vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js' --source-map "root='/assets',url='/assets/vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js.map'" --output '/var/www/discourse/public/assets/vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js'
gzip -f -c -9 /var/www/discourse/public/assets/vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js > /var/www/discourse/public/assets/vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js.gz

brotli -f --quality=11 /var/www/discourse/public/assets/vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js --output=/var/www/discourse/public/assets/vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js.br


Compression terminée pour vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js : 3,33 secondes

108801.669283898 Compression : admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js
uglifyjs '/var/www/discourse/public/assets/_admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js' -m -c -o '/var/www/discourse/public/assets/admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js' --source-map "root='/assets',url='/assets/admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js.map'" --output '/var/www/discourse/public/assets/admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js'
gzip -f -c -9 /var/www/discourse/public/assets/admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js > /var/www/discourse/public/assets/admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js.gz
[...]

Cela les compile bien, mais je dois toujours relancer la commande après la construction pour faire apparaître les fichiers manquants.

Intéressant, donc les fichiers sont bien créés, mais la persistance échoue ?

Je regarderais comment fonctionne le volume Podman et quel est le pilote qui le sous-tend. Dans l’univers Docker, nous avons eu beaucoup de problèmes étranges avec les pilotes de stockage au fil des ans, ce qui nous a même poussés à maintenir une liste de pilotes « approuvés » dans notre script de lancement.

Pour être clair, mes expériences avec Podman visaient vraiment à tester launcher et non Discourse. Du moins, lors de mes tests, cela dépendait de détails de sortie propres à Docker que Podman ne cherche pas à émuler.

@Adriany, je suppose que vous utilisez le pilote de stockage par défaut, qui est le même que celui recommandé pour Discourse et qui, dans Docker, est « overlay2* », mais je ne sais pas si c’est bien le cas.

J’utilise overlayfs, l’équivalent de overlay2.
Curieusement, la construction s’est déroulée sans problème et sans ressources manquantes après plusieurs tentatives précédentes où des ressources manquaient lorsque j’essayais d’ajouter des plugins. Lorsque j’ai reconstruit sans plugins, tout s’est passé parfaitement. Étrange ?

Édition : Cela a fonctionné pour moi et les ressources sont désormais mises en cache ici. Pendant l’exécution, cela a cessé de fonctionner pour d’autres utilisateurs.

Édition 2 : Une autre reconstruction a fait réapparaître les problèmes de ressources comme auparavant, et la solution a été de reconstruire comme précédemment.

Si les fichiers sont générés avec succès par notre pipeline d’actifs et que le système d’exploitation indique qu’il n’y a aucune erreur, mais qu’ils disparaissent après la reconstruction (ce qui redémarre effectivement le conteneur), je parierais (à nouveau) sur le pilote de stockage Podman.

À moins que quelqu’un puisse reproduire ce même comportement avec Docker (et il y aurait plusieurs sujets si c’était le cas), je crains que vous ne deviez ouvrir un ticket sur le projet Podman à ce sujet.

Salut,
J’ai effectué davantage d’investigations et il semble que je me sois trompé sur l’emplacement des fichiers ou que je sois simplement passé à côté.

Les fichiers renvoient tous une erreur 404, mais prenez cet exemple :

root@idlerpg:/var/www/discourse# find . -type f -name "*discourse-solved*"
./tmp/stylesheet-cache/discourse-solved_9_cb2984706f4402e95fd787160a5588ed0972ccc3.css
./tmp/stylesheet-cache/discourse-solved_9_cb2984706f4402e95fd787160a5588ed0972ccc3.css.map
./public/assets/plugins/_discourse-solved-5b7312e4207059eb2654a46e804b4c899cfc1e2a362d0d60e580943f9eb9d419.js
./public/assets/plugins/discourse-solved-5b7312e4207059eb2654a46e804b4c899cfc1e2a362d0d60e580943f9eb9d419.js.gz
./public/assets/plugins/discourse-solved-5b7312e4207059eb2654a46e804b4c899cfc1e2a362d0d60e580943f9eb9d419.js.br
./public/assets/plugins/discourse-solved-5b7312e4207059eb2654a46e804b4c899cfc1e2a362d0d60e580943f9eb9d419.js.map
./app/assets/javascripts/plugins/discourse-solved.js.erb
./plugins/discourse-solved/test/javascripts/acceptance/discourse-solved-test.js.es6

Ils sont bien présents, donc je suppose que c’est un problème lié à Discourse et non à Podman ; je n’ai simplement pas su chercher les fichiers correctement.

Je pensais que cela pouvait venir de Cloudflare, mais lorsque je fais un curl rapide sur localhost depuis le serveur, j’obtiens également une erreur 404.

Pouvez-vous nous fournir une reproduction de ce problème sur Docker ?