Échec de la compilation dû à une incompatibilité de version de ruby

Après quelques jours d’utilisation de
./launcher bootstrap web_only && ./launcher destroy web_only && ./launcher start web_only sans problème, j’ai rencontré des problèmes après avoir essayé d’utiliser la console rails pour définir SiteSetting.can_permanently_delete = true
en utilisant ./launcher enter web_only puis rails c

Question : La console rails est-elle accessible différemment en mode conteneur séparé ?

Après avoir échoué à obtenir une reconstruction et un amorçage réussis, j’ai ramené le serveur à quelques jours avant l’implémentation des choses liées à l’IA. Pas de chance !
La méthode d’amorçage échoue avec :

FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle install --jobs $(($(nproc) - 1)) --retry 3' failed with return #<Process::Status: pid 465 exit 18>
Location of failure: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.4.0/lib/pups/exec_command.rb:138:in `spawn'
exec failed with the params {"cd"=>"$home", "hook"=>"bundle_exec", "cmd"=>["su discourse -c 'bundle install --jobs $(($(nproc) - 1)) --retry 3'", "su discourse -c 'bundle clean'", "su discourse -c 'find /var/www/discourse/vendor/bundle -name cache -not -path \\\"*/gems/*\\\" -type d -exec rm -rf {} +'", "su discourse -c 'find /var/www/discourse/vendor/bundle -name tmp -type d -exec rm -rf {} +'"]}
bootstrap failed with exit code 18
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.
aee0f5c110bf8ce78f05c138a78712b4a0116fe6662c998b2f29800715036091

./launcher rebuild web_only échoue également

docker: Error response from daemon: failed to set up container networking: driver failed programming external connectivity on endpoint web_only (06b7b1f7f6b476adac20a11a55de776d7350e837407a6c7a6ba582c917f6dd73): Bind for 0.0.0.0:80

Après avoir mis à jour Docker Manager depuis l’administration, j’obtiens

You are running an old version of the Discourse image
Updates via the web UI are disabled until you run the latest image. To do so log in to your server using SSH and run:

  cd /var/discourse
  ./launcher rebuild app

Question : Vous avez des idées sur ce qui se passe ?

Voici l’erreur qui provoque l’échec de la construction :

[2026-02-17T16:51:13.376629 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle install --jobs $(($(nproc) - 1)) --retry 3'
Your Ruby version is 3.3.8, but your Gemfile specified ~= 3.4

Vous devez faire défiler vers le haut pour trouver l’erreur.

3 « J'aime »

Oui, je l’ai fait mais je n’ai jamais rien vu d’utile.
Voici le dernier.
exitcode18.txt (43,5 Ko)

Voici l’erreur :

[2026-02-17T16:51:13.376629 #1]  INFO -- : \u003e cd /var/www/discourse \u0026\u0026 su discourse -c 'bundle install --jobs $(($(nproc) - 1)) --retry 3'
Votre version de Ruby est 3.3.8, mais votre Gemfile spécifiait ~\u003e 3.4

Avez-vous épinglé Discourse Docker à une ancienne version ? Ou, cela pourrait être un bogue, mais il semble peu probable qu’un tel bogue passe le test de construction.

Merci Jay. J’ai vu ça, mais les messages étranges ne sont pas si rares avec des compilations réussies.

Non, j’ai suivi l’OP comme mentionné.

@pfaffman Merci pour le déplacement !

1 « J'aime »

Pouvez-vous récupérer /var/discourse ? La reconstruction doit être effectuée en utilisant l’image de base 2.0.20260209-1300

1 « J'aime »

Merci d’être intervenu @supermathie

La version utilisée est 2.0.20260209-1300
à partir d’un ./launcher rebuild web_only tout neuf

Status: Downloaded newer image for discourse/base:2.0.20260209-1300
docker.io/discourse/base:2.0.20260209-1300
Ensuring launcher is up to date
Launcher is up-to-date
Stopping old container
+ /usr/bin/docker stop -t 600 web_only
web_only
2.0.20260209-1300: Pulling from discourse/base
Digest: sha256:50d2dae489a9c9916c3d50d880f7f1282fcbe179339b60a8947ab135c1f1f9bf
Status: Image is up to date for discourse/base:2.0.20260209-1300
docker.io/discourse/base:2.0.20260209-1300

fin de la construction

docker: Error response from daemon: failed to set up container networking: driver failed programming external connectivity on endpoint web_only (9e391a36bdc1a80a6b993a466ffdba25337ce70f1fe74f2b5d8aaca75585322b): Bind for 0.0.0.0:80 failed: port is already allocated

failed to set up container networking.txt (74.3 KB)

Modification
Je pense que le péché originel a commencé avec la conversion à deux conteneurs.

quelque chose sur votre serveur utilise déjà le port 80 et doit être arrêté

[quote=“philh, post:8, topic:396317”]Je pense que le péché originel a commencé avec la conversion à deux conteneurs.
[/quote]

Mais vous avez dit que cela fonctionnait et que vous aviez effectué plusieurs reconstructions.

Discourse est la seule chose sur le serveur

Je l’ai fait et je le fais :grinning_face:

Il y a trois options de reconstruction dans le message original. Celle à laquelle je fais référence n’a jamais fonctionné, c’est-à-dire qu’elle a provoqué une erreur.

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1310/docker-proxy
tcp6       0      0 :::80                   :::*                    LISTEN      1316/docker-proxy

Vérification de deux autres instances exécutant des conteneurs séparés… le message que @pfaffman a signalé

Même résultat avec ./launcher bootstrap web_only & ./launcher destroy web_only & ./launcher start web_only

Already up to date
╭ Warning ─────────────────────────────────────────────────────────────────────╮
│                                                                              │
│   Ignored build scripts: @swc/core@1.15.7, core-js@2.6.12, core-js@3.47.0,   │
│   esbuild@0.25.12, esbuild@0.27.1, lefthook@2.1.0.                           │
│   Run "pnpm approve-builds" to pick which dependencies should be allowed     │
│   to run scripts.                                                            │
│                                                                              │
╰──────────────────────────────────────────────────────────────────────────────╯
I, [2026-02-17T21:07:23.811289 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle install --jobs $(($(nproc) - 1)) --retry 3'
Your Ruby version is 3.3.8, but your Gemfile specified ~= 3.4

Oui. Cela ne fonctionnera pas. Cela n’a jamais fonctionné. Je ne sais pas comment quelqu’un a suggéré que cela fonctionnerait. Je ne sais pas comment je n’ai pas remarqué que quelqu’un avait suggéré que cela fonctionnerait. Et le but de la configuration à deux conteneurs est que vous ne mettez presque jamais à jour les données.

Si vous avez besoin de mettre à jour les données, vous devez arrêter uniquement le conteneur web, puis reconstruire les données, puis le conteneur web uniquement. J’ai mis à jour le message initial (OP).

Si vous rencontrez des erreurs de conflit de port, c’est probablement parce que lorsque docker a redémarré, il a d’abord redémarré l’ancien conteneur d’application et c’est lui qui prend le port. Vous pouvez vérifier avec

docker ps

et voir si app est en cours d’exécution. Vous espérez que c’est le cas, car cela expliquerait le problème de port.
Vous avez probablement besoin de

 docker stop app; docker rm app
2 « J'aime »