Plantage après tentative de mise à jour

Après avoir tenté de mettre à jour Discourse via le panneau d’administration, le processus a planté et mon forum ne se chargeait plus. Heureusement, il existe une solution à ce problème :slight_smile:

Ouvrez un terminal sur votre serveur, puis exécutez les commandes suivantes :

cd /var/discourse

./launcher rebuild app

Une fois la reconstruction terminée, tout est revenu à la normale pour moi et le forum a été mis à jour. Je laisse également un journal de l’erreur à l’origine du problème, car elle est liée à un plugin Discourse.

JOURNAL

Compilation de 46 plugins…
rake aborted!
AssetProcessor::TimeoutError: [PLUGIN discourse-doc-categories] Script terminé : délai d’attente dépassé après 120 s (AssetProcessor::TimeoutError)
/var/www/discourse/lib/plugin/js_compiler.rb:32 ‘Plugin::JsCompiler#compile!’
/var/www/discourse/lib/plugin/js_manager.rb:136 ‘Plugin::JsManager#compile_js_bundle’
/var/www/discourse/lib/plugin/js_manager.rb:57 ‘bloc dans Plugin::JsManager#compile!’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:689 ‘Parallel.call_with_index’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:659 ‘Parallel.process_incoming_jobs’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:638 ‘bloc dans Parallel.worker’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:629 ‘Process.fork’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:629 ‘Parallel.worker’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:619 ‘bloc dans Parallel.create_workers’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:618 ‘Array#each’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:618 ‘Enumerable#each_with_index’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:618 ‘Parallel.create_workers’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:557 ‘Parallel.work_in_processes’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:304 ‘Parallel.map’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:248 ‘Parallel.each’
/var/www/discourse/lib/plugin/js_manager.rb:56 ‘Plugin::JsManager#compile!’
/var/www/discourse/lib/tasks/assets.rake:27 'bloc dans ’

Caused by:
AssetProcessor::TimeoutError: Script terminé : délai d’attente dépassé après 120 s (AssetProcessor::TimeoutError)
/var/www/discourse/lib/asset_processor.rb:185 ‘MiniRacer::Context#call’
/var/www/discourse/lib/asset_processor.rb:185 ‘bloc dans AssetProcessor.v8_call’
/var/www/discourse/lib/asset_processor.rb:184 ‘Thread::Mutex#synchronize’
/var/www/discourse/lib/asset_processor.rb:184 ‘AssetProcessor.v8_call’
/var/www/discourse/lib/asset_processor.rb:264 ‘AssetProcessor#rollup’
/var/www/discourse/lib/plugin/js_compiler.rb:21 ‘Plugin::JsCompiler#compile!’
/var/www/discourse/lib/plugin/js_manager.rb:136 ‘Plugin::JsManager#compile_js_bundle’
/var/www/discourse/lib/plugin/js_manager.rb:57 ‘bloc dans Plugin::JsManager#compile!’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:689 ‘Parallel.call_with_index’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:659 ‘Parallel.process_incoming_jobs’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:638 ‘bloc dans Parallel.worker’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:629 ‘Process.fork’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:629 ‘Parallel.worker’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:619 ‘bloc dans Parallel.create_workers’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:618 ‘Array#each’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:618 ‘Enumerable#each_with_index’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:618 ‘Parallel.create_workers’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:557 ‘Parallel.work_in_processes’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:304 ‘Parallel.map’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:248 ‘Parallel.each’
/var/www/discourse/lib/plugin/js_manager.rb:56 ‘Plugin::JsManager#compile!’
/var/www/discourse/lib/tasks/assets.rake:27 'bloc dans ’

Caused by:
MiniRacer::ScriptTerminatedError: terminé (MiniRacer::ScriptTerminatedError)
/var/www/discourse/lib/asset_processor.rb:185 ‘MiniRacer::Context#call’
/var/www/discourse/lib/asset_processor.rb:185 ‘bloc dans AssetProcessor.v8_call’
/var/www/discourse/lib/asset_processor.rb:184 ‘Thread::Mutex#synchronize’
/var/www/discourse/lib/asset_processor.rb:184 ‘AssetProcessor.v8_call’
/var/www/discourse/lib/asset_processor.rb:264 ‘AssetProcessor#rollup’
/var/www/discourse/lib/plugin/js_compiler.rb:21 ‘Plugin::JsCompiler#compile!’
/var/www/discourse/lib/plugin/js_manager.rb:136 ‘Plugin::JsManager#compile_js_bundle’
/var/www/discourse/lib/plugin/js_manager.rb:57 ‘bloc dans Plugin::JsManager#compile!’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:689 ‘Parallel.call_with_index’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:659 ‘Parallel.process_incoming_jobs’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:638 ‘bloc dans Parallel.worker’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:629 ‘Process.fork’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:629 ‘Parallel.worker’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:619 ‘bloc dans Parallel.create_workers’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:618 ‘Array#each’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:618 ‘Enumerable#each_with_index’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:618 ‘Parallel.create_workers’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:557 ‘Parallel.work_in_processes’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:304 ‘Parallel.map’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:248 ‘Parallel.each’
/var/www/discourse/lib/plugin/js_manager.rb:56 ‘Plugin::JsManager#compile!’
/var/www/discourse/lib/tasks/assets.rake:27 'bloc dans ’
Tasks: TOP => assets:precompile
(Voir la trace complète en exécutant la tâche avec --trace)
/var/www/discourse/script/assemble_ember_build.rb:167 ‘Kernel#system’: Commande échouée avec le code de sortie 1 : bin/rake (RuntimeError)
from /var/www/discourse/script/assemble_ember_build.rb:167 ‘’
Docker Manager: ÉCHEC DE LA MISE À NIVEAU
#<RuntimeError: RuntimeError>
/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:205 ‘DockerManager::Upgrader#run’
/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:105 ‘DockerManager::Upgrader#upgrade’
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:19 'bloc dans ’
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:6 ‘Kernel#fork’
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:6 ‘’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/railties-8.0.5/lib/rails/commands/runner/runner_command.rb:44 ‘Kernel.load’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/railties-8.0.5/lib/rails/commands/runner/runner_command.rb:44 ‘bloc dans Rails::Command::RunnerCommand#perform’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/activesupport-8.0.5/lib/active_support/execution_wrapper.rb:91 ‘ActiveSupport::ExecutionWrapper.wrap’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/railties-8.0.5/lib/rails/commands/runner/runner_command.rb:70 ‘Rails::Command::RunnerCommand#conditional_executor’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/railties-8.0.5/lib/rails/commands/runner/runner_command.rb:43 ‘Rails::Command::RunnerCommand#perform’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/thor-1.5.0/lib/thor/command.rb:28 ‘Thor::Command#run’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/thor-1.5.0/lib/thor/invocation.rb:127 ‘Thor::Invocation#invoke_command’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/railties-8.0.5/lib/rails/command/base.rb:178 ‘Rails::Command::Base#invoke_command’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/thor-1.5.0/lib/thor.rb:538 ‘Thor.dispatch’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/railties-8.0.5/lib/rails/command/base.rb:73 ‘Rails::Command::Base.perform’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/railties-8.0.5/lib/rails/command.rb:65 ‘bloc dans Rails::Command.invoke’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/railties-8.0.5/lib/rails/command.rb:143 ‘Rails::Command.with_argv’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/railties-8.0.5/lib/rails/command.rb:63 ‘Rails::Command.invoke’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/railties-8.0.5/lib/rails/commands.rb:18 ‘’
/usr/local/lib/ruby/3.4.0/bundled_gems.rb:82 ‘Kernel.require’
/usr/local/lib/ruby/3.4.0/bundled_gems.rb:82 ‘bloc (2 niveaux) dans Kernel#replace_require’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/bootsnap-1.24.3/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:33 ‘Kernel#require’
bin/rails:18 ‘’
Démarrage de 1(s) worker(s) Pitchfork qui avaient été arrêtés initialement

Si quelqu’un dans la communauté rencontre toujours des problèmes avec la mise à jour, n’hésitez pas à poster dans les commentaires ci-dessous et je ferai de mon mieux pour aider.

Merci <3

2 « J'aime »

C’est pourquoi je ne mets jamais à jour depuis l’interface d’administration :woman_shrugging:t2:

C’est la méthode habituelle pour mettre à jour les installations standard auto-hébergées.

8 « J'aime »

On dirait qu’il s’agit d’un plugin spécifique qui n’a pas pu être compilé dans le délai imparti de 2 minutes.

Peux-tu partager les spécifications de ton serveur @TroLLoBlogger ?

5 « J'aime »

Si vous voulez dire autre chose, dites-le-moi :smiley:

1 « J'aime »

Par curiosité, avez-vous configuré un espace d’échange ?

Ce seul vCPU pourrait vous poser problème.

3 « J'aime »

Oui, c’est possible. Mais il y a deux jours, il n’y avait absolument aucun problème avec la mise à jour. Je vais aussi créer un espace d’échange de 2 Go et nous verrons bien :slight_smile:

sudo fallocate -l 2G /swapfile        
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

3 « J'aime »

Hmmm, un seul vCPU pour effectuer des mises à jour web avec la complexité de la construction des assets du front-end pourrait être trop ambitieux de nos jours.

Qu’en penses-tu @david ? Avec des assets préconstruits, cela fonctionnerait bien, mais nous devrons peut-être détecter et désactiver les mises à jour web pour cette combinaison…

4 « J'aime »

Les actifs préconstruits doivent être récupérés, même avec une mise à jour basée sur le web (ils sont distribués séparément de l’image Docker)

doc-categories n’est pas un plugin principal, nous ne distribuons donc pas d’actifs pour celui-ci. Mais… c’est un plugin très simple. 120 secondes, c’est très long pour qu’il prenne cela :thinking:

4 « J'aime »

Je sais, ce que je veux dire, c’est que la combinaison de

Plugins non essentiels + installation avec un seul vCPU

peut justifier de demander à l’utilisateur de procéder à une reconstruction.

5 « J'aime »

J’ai un serveur avec 1 vCPU et 1 Go de RAM. J’ai essayé au moins 10 fois, mais Discourse n’a jamais fonctionné correctement, sauf une fois où cela a réussi (mais j’ai dû le reconstruire, ce qui a ensuite déclenché un cycle de pannes incessantes). J’ai ajouté 2 Go d’espace d’échange, puis 5 Go, sans aucun succès :person_shrugging: . Aucun plugin non essentiel, juste… échec.

2 « J'aime »

1 vCPU et 1 Go de RAM – si je ne me trompe pas, c’est un serveur trop faible, surtout en termes de RAM. Le mien a aussi un seul CPU, mais il dispose de 4 Go de RAM. Ce qui reste encore un peu juste s’il y a des plugins externes. Mais j’y réfléchirai. Pour l’instant, l’espace d’échange (SWAP) peut me convenir ; sinon, je désactiverai les plugins externes jusqu’à ce que je passe à un serveur plus puissant.

3 « J'aime »

Oui, le pauvre 1 vCPU qui essaie d’exécuter nginx, ruby, postgresql, redis et le nodejs pour la reconstruction est peut-être trop ambitieux.

3 « J'aime »

Pour information, j’exécute une instance avec 2 vCPU, 4 Go de RAM et 40 Go de disque, et j’ai ajouté le plugin discourse-doc-categories pour tester la construction (j’ai également deux plugins non officiels en plus des plugins principaux) :

               total        used        free      shared  buff/cache   available
Mem:           3.7Gi       1.6Gi        98Mi        69Mi       2.3Gi       2.2Gi
Swap:          2.0Gi        14Mi       2.0Gi

Quoi qu’il en soit, je viens d’effectuer la dernière mise à jour (critique) depuis l’interface d’administration sur mon iPhone, par curiosité, et cette fois, c’était rapide et sans problème. :slight_smile:

2 « J'aime »

Après une mise à jour effectuée via le panneau d’administration, j’ai perdu un grand nombre de pièces jointes. Depuis, je n’utilise plus le panneau d’administration pour les mises à jour, je passe uniquement par rebuild.

1 « J'aime »

Les deux font des choses très similaires et ne modifieront ni le contenu du site ni le dossier des téléchargements. C’est très surprenant.

La principale différence réside dans la charge du serveur.