Exécution de multisite:migrate simultanément échoue

Lié à celui-ci, je suppose

Multisite migrator is running using 2 processes
Running migrations and seeds for default database(s)
[mutex.cc : 2443] RAW: Check w->waitp->cond == nullptr failed: Mutex::Fer while waiting on Condition
rake aborted!
Parallel::DeadWorker: Parallel::DeadWorker (Parallel::DeadWorker)
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-1.27.0/lib/parallel.rb:83:in 'Parallel::Worker#work'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-1.27.0/lib/parallel.rb:545:in 'block (4 levels) in Parallel.work_in_processe
s' 
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-1.27.0/lib/parallel.rb:660:in 'Parallel.with_instrumentation'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-1.27.0/lib/parallel.rb:544:in 'block (3 levels) in Parallel.work_in_processe
s' 
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-1.27.0/lib/parallel.rb:532:in 'block (2 levels) in Parallel.work_in_processe
s' 
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-1.27.0/lib/parallel.rb:219:in 'block (4 levels) in Parallel.in_threads'

Caused by:
EOFError: end of file reached (EOFError)
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-1.27.0/lib/parallel.rb:81:in 'Parallel::Worker#work'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-1.27.0/lib/parallel.rb:545:in 'block (4 levels) in Parallel.work_in_processe
s' 
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-1.27.0/lib/parallel.rb:660:in 'Parallel.with_instrumentation'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-1.27.0/lib/parallel.rb:544:in 'block (3 levels) in Parallel.work_in_processe
s' /var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-1.27.0/lib/parallel.rb:532:in 'block (2 levels) in Parallel.work_in_processe
s'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-1.27.0/lib/parallel.rb:219:in 'block (4 levels) in Parallel.in_threads'
Tasks: TOP => multisite:migrate
(See full trace by running task with --trace)
Migration failed --=> RC = 1 

Alors, j’ai pensé être malin et l’ai remis à 1 avec DISCOURSE_MULTISITE_MIGRATE_CONCURRENCY=1

Eh bien. Ça n’a pas fonctionné non plus.

Multisite migrator is running using 1 processes
Running migrations and seeds for default database(s) [BUG] Segmentation fault at 0x0000000000000000
ruby 3.4.7 (2025-10-08 revision 7a5688e2a2) +PRISM [x86_64-linux]
-- Machine register context ------------------------------------------------
 RIP: 0x00007e0e54d5e163 RBP: 0x00007e0e50cfc7a0 RSP: 0x00007e0e50cfc770 RAX: 0x00007e0e50cfdd70 RBX: 0x00007e0e58e90700 RCX: 0x00007e0e57ddf178
 RDX: 0x0000000000000000 RDI: 0x0000000000000000 RSI: 0x00007e0e58e90700  R8: 0x00007e0e57ddefb0  R9: 0x0000000000000030 R10: 0x00007e0e400962f0 R11: 0x0000000000000050 R12: 0x0000000000000000 R13: 0x00007e0e58e90700
 R14: 0x0000000000000000 R15: 0x00007e0e55c460e0 EFL: 0x0000000000010246

-- C level backtrace information -------------------------------------------/usr/local/lib/libruby.so.3.4(rb_print_backtrace+0x8) [0x7e0e7633c882] /tmp/ruby-build.20260305163605.64055.iTdGM5/ruby-3.4.7/vm_dump.
c:823 /usr/local/lib/libruby.so.3.4(rb_vm_bugreport) /tmp/ruby-build.20260305163605.64055.iTdGM5/ruby-3.4.7/vm_dump.c:1155/usr/local/lib/libruby.so.3.4(rb_bug_for_fatal_signal+0x104) [0x7e0e7611b4b4] /tmp/ruby-build.20260305163605.64055.iTdGM5/ruby-3.4.7/e
rror.c:1130/usr/local/lib/libruby.so.3.4(sigsegv+0x46) [0x7e0e7627b9a6] /tmp/ruby-build.20260305163605.64055.iTdGM5/ruby-3.4.7/signal.c:934/lib/x86_64-linux-gnu/libc.so.6(0x7e0e75c45330) [0x7e0e75c45330]/var/www/discourse/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/mini_racer-0.19.2/mini_racer_extension.so(0x7e0e54d5e163) [0x7e0e54d5e163]/var/www/discourse/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/mini_racer-0.19.2/mini_racer_extension.so(0x7e0e54d5e4e7) [0x7e0e54d5e4e7]/var/www/discourse/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/mini_racer-0.19.2/mini_racer_extension.so(0x7e0e54848668) [0x7e0e54848668]/var/www/discourse/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/mini_racer-0.19.2/mini_racer_extension.so(0x7e0e5484217b) [0x7e0e5484217b]/var/www/discourse/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/mini_racer-0.19.2/mini_racer_extension.so(0x7e0e54849815) [0x7e0e54849815]/var/www/discourse/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/mini_racer-0.19.2/mini_racer_extension.so(0x7e0e548499ff) [0x7e0e548499ff]/var/www/discourse/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/mini_racer-0.19.2/mini_racer_extension.so(0x7e0e54306628) [0x7e0e54306628]/var/www/discourse/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/mini_racer-0.19.2/mini_racer_extension.so(0x7e0e5430839b) [0x7e0e5430839b]/var/www/discourse/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/mini_racer-0.19.2/mini_racer_extension.so(0x7e0e545fba80) [0x7e0e545fba80]/var/www/discourse/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/mini_racer-0.19.2/mini_racer_extension.so(0x7e0e545fc57a) [0x7e0e545fc57a]/var/www/discourse/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/mini_racer-0.19.2/mini_racer_extension.so(0x7e0e5491b636) [0x7e0e5491b636]
-- Other runtime information -----------------------------------------------
* Loaded script: /var/www/discourse/vendor/bundle/ruby/3.4.0/bin/rake

* Loaded features:

    0 enumerator.so

Aidez-moi à corriger cela.

Exécutez-vous les images Docker Discourse officielles ? Je viens d’exécuter multisite:migrate sur notre propre hébergement et cela s’est déroulé sans problème. Toute information sur l’environnement dans lequel vous avez exécuté la migration me sera utile pour déboguer cela.

Hmm, je vois mini_racer dans la trace de la pile, nous pouvons donc essayer de supprimer le contexte mini_racer avant de forker, ce qui est la bonne chose à faire de toute façon.

1 « J'aime »

Non, nous exécutons notre propre environnement, et j’ai trouvé le coupable.

Nous exécutions plusieurs tâches rake dans la même commande (RAILS_ENV=production bundle exec rake db:seed_fu multisite:migrate multisite:seed_fu).

Le db:seed_fu était là pour contourner un bug vieux de 10 ans. Lorsque je l’exécute séparément, le problème disparaît. Et grâce à votre commentaire ci-dessus, je comprends maintenant ce qui se passait.

1 « J'aime »

Content que vous ayez trouvé la solution :+1:

1 « J'aime »