Échec de la reconstruction - passage à côté de la section "after_assets_precompile" dans app.yml

J’ai effectué une reconstruction de lanceur ./launcher rebuild app — aucune modification des fichiers système. Je suis maintenant bloqué sur les points de suspension clignotants de Discourse.

J’ai vérifié les points suivants :

  • docker ps affiche l’image de l’application Discourse (semble normal).
  • La commande top montre une activité (semble normale).
  • Je peux voir l’état de Sidekiq (semble normal).

J’ai donc reconstruit l’application à nouveau.

Mêmes résultats.

J’ai essayé d’utiliser le mode sans échec. Tout est désactivé. Aucun changement. Je reçois toujours l’écran des points de suspension clignotants.

J’ai examiné chaque ligne du code source. Je constate que quatre fichiers JS ne sont pas disponibles. Ce sont :

Il y a de nombreux fichiers JavaScript manquants. Ce sont les premiers trouvés.

Examen initial :

  • Les fichiers ne sont pas disponibles via ma diffusion CDN.
  • Le CDN tire de mon bucket S3.
  • Les fichiers ne sont pas dans mon bucket S3 où tous les autres actifs sont stockés.

En regardant les résultats de la reconstruction, je peux voir ce qui suit :

  1. Les 4 fichiers ont été créés et écrits dans public/assets/ avec une extension de fichier .js.
  2. Les 4 fichiers ont été compressés et enregistrés avec une extension de fichier .br.js.

En vérifiant mon serveur :

  1. Les 4 fichiers .js sont disponibles sur mon serveur.
  2. Les fichiers .br.js ne sont pas disponibles sur mon serveur.
  3. Les fichiers .br.js ne sont pas dans mon bucket S3.

En parcourant les résultats de la reconstruction, il semble que l’activité after_assets_precompile ne se produise pas lors de mes reconstructions. Je peux exécuter manuellement un rake s3:upload_assets et les actifs sont migrés vers S3 et tout fonctionne bien.

J’ai vérifié les points suivants :

  1. Mon fichier yml passe les vérifications de formatage correct.

Que puis-je vérifier pour déterminer pourquoi after_assets_precompile n’est pas traité dans le cadre de la reconstruction ?

note : J’exécute : 3.4.0.beta4-dev - 6a50b3d4b4

1 « J'aime »

Avez-vous ajouté la stanza pour téléverser des ressources ?

Configurer un fournisseur de stockage d’objets compatible S3 pour les téléversements

Vous pouvez trouver cette tâche rake là-bas, puis l’exécuter depuis l’intérieur du conteneur (pour gagner du temps lors d’une reconstruction). Ensuite, effectuez une reconstruction une fois que vous avez modifié votre fichier yml.

S3 est opérationnel sur le site depuis 43 jours. Les commandes rake y ont été placées dans le cadre de l’installation S3.

Le site a été reconstruit au moins 30 fois. J’ai ajouté des plugins et des composants supplémentaires au fil du temps. Cela indiquerait que des fichiers .js ont été ajoutés et peuplés dans le bucket S3.

Le composant S3 a très bien fonctionné. C’est la première fois que j’ai des problèmes avec des fichiers qui ne sont pas migrés vers S3.

Que puis-je investiguer pour comprendre pourquoi les fichiers n’ont pas été déplacés ?

Quelqu’un sait ce qui pourrait empêcher after_assets_precompile de s’exécuter ?

1 « J'aime »

Aidez-moi !

Lors de la reconstruction, le processus ignore la section suivante dans le fichier app.yml :

after_assets_precompile:
  - exec:
      cd: $home
      cmd:
        - sudo -E -u discourse bundle exec rake s3:upload_assets
        - sudo -E -u discourse bundle exec rake s3:expire_missing_assets

Immédiatement après la reconstruction, je peux exécuter manuellement les commandes via :

./launcher enter app
rake s3:upload_assets
rake s3:expire_missing_assets

Les commandes s’exécutent et traitent les fichiers requis vers S3.

J’ai ajouté une commande echo à la section after_assets_precompile.

      cmd:
        - echo "Beginning of precompile commands"
        - sudo -E -u discourse bundle exec rake s3:upload_

L’instruction echo n’apparaît jamais dans la sortie de reconstruction.

L’étape de reconstruction traite les étapes avant et après cette section dans le fichier app.yml. Elle traite tous les plugins et commandes personnalisées.

J’ai entrepris les démarches suivantes pour tenter de résoudre le problème :

  1. Suppression de tous les plugins
  2. Désactivation de tous les composants
  3. Examen de tous les fichiers journaux de discourse. Aucune erreur n’a été détectée.
  4. Examen des fichiers journaux du système de base. Aucune erreur n’a été détectée.

Quelqu’un a-t-il une idée de la raison pour laquelle le processus de reconstruction ignorerait cette section ?

Pour tester, j’ai déplacé les commandes after_assets_precompile dans la section des commandes personnalisées.

run:
  - exec: echo "Début des commandes personnalisées"
  ## Si vous souhaitez définir l'adresse e-mail 'De' pour votre première inscription, décommentez et modifiez :
  ## Après avoir reçu le premier e-mail d'inscription, re-commentez la ligne. Elle ne doit s'exécuter qu'une seule fois.
  #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
  ## commande pour protéger le site web par mot de passe pendant les travaux. à supprimer pour la production.
  - exec:
      cd: $home
      cmd:
        - echo "Début des commandes de précompilation"
        - sudo -E -u discourse bundle exec rake s3:upload_assets
        - sudo -E -u discourse bundle exec rake s3:expire_missing_assets
  - exec: echo "Fin des commandes personnalisées"

Les commandes ont fonctionné sans aucun problème. Cela exclut les problèmes d’accès environnemental ou de sécurité.

Le processus de lancement ignore le code after_assets_precompile lors de la reconstruction.

Quelqu’un a-t-il une idée ?

1 « J'aime »

Aucune idée, mais j’ai reconstruit il y a environ 4 heures sans aucun problème.

1 « J'aime »

Vous avez peut-être une erreur d’espace blanc ou d’indentation dans votre fichier yml. Recherchez un validateur et vérifiez : [valider yaml]

ceci ne devrait pas être une clé de premier niveau, cela devrait être sous hooks, par exemple :

hooks:
  after_assets_precompile:
    - exec:
        cd: $home
        cmd:
          - sudo -E -u discourse bundle exec rake s3:upload_assets
          - sudo -E -u discourse bundle exec rake s3:expire_missing_assets
3 « J'aime »

Cela était indiqué dans le premier message. app.yml a été validé pour les bonnes indentations.

1 « J'aime »

@supermathie - tu es formidable avec une vue incroyable. Tu as pu constater que le code n’était pas indenté de deux espaces. Et ce, à partir d’un seul extrait par rapport à une section plus étendue. Merci.

J’ai ajouté les deux espaces, et cela a résolu le problème.

J’avais précédemment fait passer app.yml par un vérificateur yml. L’outil de test m’a dit que le fichier était structurellement sain. Il ne pouvait pas me dire qu’il était fonctionnellement erroné.

L’extrait de code correct devrait être :

hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/discourse-adplugin
          - git clone https://github.com/discourse/discourse-affiliate
          - git clone https://github.com/discourse/discourse-subscriptions
          - git clone https://github.com/discourse/discourse-yearly-review
          - git clone https://github.com/discourse/discourse-whos-online
          - git clone https://github.com/discourse/discourse-data-explorer
  # définir les fichiers internes pour le cdn
  after_assets_precompile:
    - exec:
        cd: $home
        cmd:
          - echo "Début des commandes de précompilation"
          - sudo -E -u discourse bundle exec rake s3:upload_assets
          - sudo -E -u discourse bundle exec rake s3:expire_missing_assets

Pour documenter le fichier app.yml. Les seules clés de premier niveau sont :

  • templates :
  • params :
  • env :
  • volumes :
  • hooks :
  • run :

Tout le reste doit être indenté.

La plus simple des erreurs peut être la plus frustrante. Six heures de ma vie ont été perdues pour deux espaces.

Mon royaume pour deux espaces.

2 « J'aime »

Cela m’arrive tout le temps.

Mon autre favori est de modifier le mauvais fichier, ou le bon fichier sur le mauvais ordinateur.

2 « J'aime »

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.