Problème de migration lié à DiscourseJsProcessor ?

Salut @david J’ai des problèmes avec un bootstrap :

I, [2023-08-24T16:50:36.568059 #1]  INFO -- : > cd /var/www/discourse & su discourse -c 'bundle exec rake db:migrate'
rake aborted!
Errno::ENOENT: No such file or directory @ rb_sysopen - tmp/js-processor.js
/var/www/discourse/lib/discourse_js_processor.rb:140:in `read'
/var/www/discourse/lib/discourse_js_processor.rb:140:in `create_new_context'
/var/www/discourse/lib/discourse_js_processor.rb:156:in `block in v8'
/var/www/discourse/lib/discourse_js_processor.rb:154:in `synchronize'
/var/www/discourse/lib/discourse_js_processor.rb:154:in `v8'
/var/www/discourse/lib/discourse_js_processor.rb:169:in `block in v8_call'
/var/www/discourse/lib/discourse_js_processor.rb:168:in `synchronize'
/var/www/discourse/lib/discourse_js_processor.rb:168:in `v8_call'
/var/www/discourse/lib/discourse_js_processor.rb:193:in `perform'

Est-ce lié à DEV: Use esbuild to make DiscourseJsProcessor by CvX · Pull Request #23223 · discourse/discourse · GitHub

1 « J'aime »

Y a-t-il une autre trace de pile disponible ? Ou pouvez-vous voir quelle migration la déclenche ?

2 « J'aime »

En fait, ne vous inquiétez pas, @cvx et moi avons trouvé le problème - nous aurons bientôt un correctif.

1 « J'aime »

Ça a marché !

Je pensais que ça allait être corrigé par une nouvelle image de base il y a quelques minutes, mais ça a échoué une fois après ça. . .

Enfin, ça semble aller maintenant.

1 « J'aime »

Ok super, content d’apprendre que ça fonctionne ! Nous avons un peu un problème d’œuf et de poule que nous devons résoudre. Suite au commit que vous avez lié, assets:precompile doit être exécuté au moins une fois avant d’exécuter db:migrate. Mais l’inverse est également vrai : assets:precompile a besoin d’un schéma de base de données à jour.

Par curiosité, quel a été votre processus ici ? Avez-vous effectué une mise à niveau basée sur docker_manager via l’interface utilisateur ? Ou s’agissait-il d’un ./launcher rebuild app ? (ou quelque chose d’entièrement différent ?)

1 « J'aime »

J’ai parlé trop vite.

Ça a encore échoué, mais… oh. Mais la dernière fois, la base de données avait déjà été migrée ?

Quand ça a marché, j’ai exécuté ./launcher bootstrap x depuis la ligne de commande.

Ensuite, je l’ai exécuté avec Ansible, ce qui fait :

git pull && git checkout main && ./launcher bootstrap  {{ discourse_yml }} {{ launcher_args | default("")}}

(Je suppose que je dois supprimer git checkout main - je ne suis pas sûr pourquoi c’était là)

Aha. Mais Ansible supprime d’abord la base de données (c’est pour un site que j’utilise pour les migrations, donc recommencer est fréquent). C’est donc cohérent avec vos “œufs”. Soupir. Mais ensuite, j’ai désactivé drop_database et je l’ai exécuté deux fois depuis Ansible, et ça a échoué, puis j’ai relancé le bootstrap depuis la ligne de commande, et ça a toujours échoué. Il n’y a aucun indice sur les migrations :

Installing mysql2 0.5.5 with native extensions
Bundle complete! 137 Gemfile dependencies, 173 gems now installed.
Gems in the groups 'test' and 'development' were not installed.
Bundled gems are installed into `./vendor/bundle`

I, [2023-08-24T17:24:31.403199 #1]  INFO -- : Replacing types { with set_real_ip_from 192.168.1.0/24;
set_real_ip_from 172.19.0.0/24;
set_real_ip_from 172.18.0.0/24;
set_real_ip_from 172.17.0.0/24;
set_real_ip_from 38.242.7.193/28;
real_ip_recursive on;
real_ip_header X-Forwarded-For;
types {
 in /etc/nginx/conf.d/discourse.conf
I, [2023-08-24T17:24:31.403687 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'LOAD_PLUGINS=0 bundle exec rake plugin:pull_compatible_all'
I, [2023-08-24T17:24:33.084210 #1]  INFO -- : discourse-microsoft-auth is already at latest compatible version

I, [2023-08-24T17:24:33.084593 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate'
rake aborted!
Errno::ENOENT: No such file or directory @ rb_sysopen - tmp/js-processor.js
/var/www/discourse/lib/discourse_js_processor.rb:140:in `read'
/var/www/discourse/lib/discourse_js_processor.rb:140:in `create_new_context'
/var/www/discourse/lib/discourse_js_processor.rb:156:in `block in v8'
/var/www/discourse/lib/discourse_js_processor.rb:154:in `synchronize'
/var/www/discourse/lib/discourse_js_processor.rb:154:in `v8'
/var/www/discourse/lib/discourse_js_processor.rb:169:in `block in v8_call'
/var/www/discourse/lib/discourse_js_processor.rb:168:in `synchronize'
/var/www/discourse/lib/discourse_js_processor.rb:168:in `v8_call'
/var/www/discourse/lib/discourse_js_processor.rb:193:in `perform'
/var/www/discourse/lib/pretty_text.rb:54:in `apply_es6_file'

Mais est-ce que 'templates/enable-ruby-yjit.yml' pourrait être le problème ? EDIT : Ce n’était pas ça. Et puis j’ai supprimé les modèles mysql et import. Toujours pas de succès.

Ce problème existe-t-il depuis longtemps ? J’ai récemment mis à niveau un autre site qui est sur ECS et il semblait y avoir quelque chose d’étrange avec la migration, puis les actifs étaient cassés. C’est une énorme base de données, cependant, donc j’ai pensé que j’étais peut-être juste impatient, et aussi j’ai fait une partie de ce processus à la main, donc j’ai pensé que j’avais juste été négligent.

1 « J'aime »

@cvx vient de fusionner ceci, ce qui devrait résoudre le problème d’interdépendance (une fois que cela passera les tests) :

Cela aurait du sens :+1:.

Nous pensons que l’erreur est déclenchée si des migrations de base de données incluent un appel au moteur de rendu markdown (PrettyText). Dans la grande majorité des sites existants, c’est rare. Mais sur un site flambant neuf, nous semons de nouveaux sujets dans la base de données, ce qui implique de cuire du markdown.

Non, seulement depuis quelques heures (depuis DEV: Use esbuild to make DiscourseJsProcessor by CvX · Pull Request #23223 · discourse/discourse · GitHub)

1 « J'aime »

Eh bien, je vois ce commit quand je fais git pull dans mon environnement de développement, mais ça échoue toujours, que ce soit depuis ansible ou quand je l’exécute localement (et je ne supprime pas la base de données).

Il n’a pas encore tout à fait atteint le stade « tests-passés », donc je m’attendrais à ce qu’il échoue toujours pour une installation standard.

S’agit-il d’un cluster « de production » local ? Ou d’un environnement de développement ?

1 « J'aime »

C’est en production. Il y a des traefiks comme proxy inverse, mais c’est une installation assez standard à part ça (et une base de données construite à partir de l’image standard postgres13, mais elle a pgvector).

J’ai mentionné mon environnement de développement car j’y ai fait un git pull en essayant de voir si le commit avait passé les tests ; je vois bien FIX: Compile js-processor before db:migrate (#23229) dans git log là-bas).

Je vais reprendre les tests de ce que je testais auparavant et réessayer un peu plus tard.

Je suppose que votre environnement de développement fonctionne sur main, c’est pourquoi le commit apparaît. Nous avons rencontré un problème avec notre CI interne pour les tests réussis, mais j’espère que cela sera résolu dans les 30 prochaines minutes environ :crossed_fingers:

1 « J'aime »

Ok, ça devrait être bon maintenant. Pouvez-vous réessayer et nous dire comment ça se passe @pfaffman

1 « J'aime »

J’ai exécuté un bootstrap/déploiement sans supprimer la base de données : cela a fonctionné !

J’ai exécuté un autre bootstrap/déploiement qui a supprimé la base de données : cela a fonctionné !

1 « J'aime »

Suis-je le seul à avoir un écran vide lors de la mise à jour ?

Vous devrez probablement effectuer une reconstruction en ligne de commande

Ce sujet a été automatiquement fermé après 10 heures. Les nouvelles réponses ne sont plus autorisées.