Build schlägt wegen Ruby-Versionskonflikt fehl

Nach einigen Tagen der Nutzung von
./launcher bootstrap web_only && ./launcher destroy web_only && ./launcher start web_only ohne Probleme
trat ein Problem auf, nachdem ich versucht hatte, die Rails-Konsole zu verwenden, um SiteSetting.can_permanently_delete = true zu setzen,
indem ich ./launcher enter web_only und dann rails c verwendete.

Frage: Wird die Rails-Konsole im separaten Container-Modus anders aufgerufen?

Nachdem der Versuch, ein erfolgreiches Rebuild und Bootstrap zu erhalten, fehlgeschlagen war, habe ich den Server auf ein paar Tage vor der Implementierung der KI-Sachen zurückgesetzt. Kein Erfolg!
Die Bootstrap-Methode schlägt fehl mit:

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 schlägt ebenfalls fehl mit:

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

Nach dem Update von Docker Manager über die Admin-Oberfläche erhalte ich:

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

Frage: Habt ihr irgendwelche Ideen, was da los ist?

Hier ist der Fehler, der den Build fehlschlagen lässt:

[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

Sie müssen nach oben scrollen, um den Fehler zu finden.

3 „Gefällt mir“

Ja, das habe ich getan, aber nie etwas Hilfreiches gesehen.
Hier ist das Neueste.
exitcode18.txt (43,5 KB)

Hier ist der Fehler:

[2026-02-17T16:51:13.376629 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle install --jobs $(($(nproc) - 1)) --retry 3'
Ihre Ruby-Version ist 3.3.8, aber Ihre Gemfile spezifizierte ~\> 3.4

Haben Sie Discourse Docker auf einer alten Version fixiert? Oder könnte es ein Fehler sein, aber es scheint unwahrscheinlich, dass ein solcher Fehler den Build-Test bestanden hätte.

Danke Jay. Ich habe das gesehen, aber seltsame Nachrichten sind bei erfolgreichen Builds nicht ungewöhnlich.

Nein, ich bin der Anleitung des Erstellers gefolgt, wie erwähnt.

@pfaffman Danke für die Verschiebung!

1 „Gefällt mir“

Können Sie /var/discourse ziehen? Der Neuaufbau sollte mit dem Basis-Image 2.0.20260209-1300 durchgeführt werden.

1 „Gefällt mir“

Danke für deine Mithilfe, @supermathie

Es wird die Version 2.0.20260209-1300 verwendet,
nach einem frischen ./launcher rebuild web_only

Status: Newer image for discourse/base:2.0.20260209-1300 was downloaded
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

Ende des Builds

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)

Edit
Ich vermute, die ursprüngliche Sünde begann mit der Umstellung auf zwei Container.

Irgendetwas auf Ihrem Server verwendet bereits Port 80 und muss gestoppt werden

[quote=“philh, post:8, topic:396317”]Ich denke, die ursprüngliche Sünde begann mit der Umstellung auf zwei Container.
[/quote]

Aber Sie sagten, es hätte funktioniert und Sie hätten mehrere Neuerstellungen durchgeführt.

Discourse ist das Einzige auf dem Server

Das habe ich und tue ich auch :grinning_face:

Es gibt drei Neuaufbauoptionen im ursprünglichen Beitrag. Diejenige, auf die ich mich beziehe, hat nie funktioniert, d.h. hat zum Fehlschlag geführt

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

Überprüfe zwei weitere Instanzen, die separate Container ausführen… die Nachricht, auf die @pfaffman hingewiesen hat

Dasselbe Ergebnis mit ./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

Ja. Das wird nicht funktionieren. Es hat noch nie funktioniert. Ich weiß nicht, wie jemand vorschlagen konnte, dass es funktionieren würde. Ich weiß nicht, wie ich nicht bemerkt habe, dass jemand vorgeschlagen hat, dass es funktionieren würde. Und der Sinn des Zwei-Container-Setups ist, dass man Daten meistens nie aktualisiert.

Wenn Sie Daten aktualisieren müssen, müssen Sie nur Web herunterfahren und dann Daten neu erstellen, dann web_only. Ich habe den OP aktualisiert.

Wenn Sie Portkonfliktfehler erhalten, liegt dies wahrscheinlich daran, dass beim Neustart von Docker zuerst der alte App-Container neu gestartet wurde und dieser den Port belegt. Sie können mit

docker ps

überprüfen und sehen, ob app läuft. Sie hoffen, dass dies der Fall ist, da dies das Portproblem erklären würde.

Sie müssen wahrscheinlich

 docker stop app; docker rm app
2 „Gefällt mir“