Il build fallisce a causa di una discrepanza della versione di ruby

Dopo alcuni giorni di utilizzo di
./launcher bootstrap web_only && ./launcher destroy web_only && ./launcher start web_only senza problemi
ho riscontrato problemi dopo aver tentato di utilizzare la console rails per impostare SiteSetting.can_permanently_delete = true
usando ./launcher enter web_only quindi rails c

Domanda: La console rails viene acceduta in modo diverso in modalità container separato?

Dopo non essere riuscito a ottenere una ricostruzione e un bootstrap di successo, ho riportato il server indietro di un paio di giorni rispetto all’implementazione delle cose relative all’IA. Nessun risultato!
Il metodo di bootstrap fallisce con:

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

Anche ./launcher rebuild web_only restituisce errori

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

Dopo aver aggiornato Docker Manager dall’Admin ottengo

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

Domanda: Avete qualche idea su cosa stia succedendo?

Ecco l’errore che causa il fallimento della build:

[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

Devi scorrere verso l’alto per trovare l’errore.

3 Mi Piace

Sì, l’ho fatto ma non vedo mai nulla di utile.
Ecco l’ultimo.
exitcode18.txt (43,5 KB)

Ecco l’errore:

[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'
La tua versione di Ruby è 3.3.8, ma il tuo Gemfile specificava ~\u003e 3.4

Hai bloccato Discourse Docker a una versione vecchia? Oppure, potrebbe essere un bug, ma sembra improbabile che un bug del genere superi il test di compilazione.

Grazie Jay. L’ho visto, ma i messaggi strani non sono così rari con build riuscite.

No, ho seguito l’OP come menzionato.

@pfaffman Grazie per lo spostamento!

1 Mi Piace

Puoi recuperare /var/discourse? La ricostruzione dovrebbe essere eseguita utilizzando l’immagine base 2.0.20260209-1300

1 Mi Piace

Grazie per essere intervenuto @supermathie

Viene utilizzato il 2.0.20260209-1300
da un ./launcher rebuild web_only appena eseguito

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

fine della build

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)

Modifica
Penso che il peccato originale sia iniziato con la conversione a due container.

qualcosa sul tuo server sta già utilizzando la porta 80 e deve essere arrestato

[quote=“philh, post:8, topic:396317”]Penso che il peccato originale sia iniziato con la conversione a due contenitori.
[/quote]

Ma hai detto che aveva funzionato e avevi fatto diverse ricostruzioni.

Discourse è l’unica cosa sul server

L’ho fatto e lo faccio :grinning_face:

Ci sono tre opzioni di ricostruzione nel post originale. Quella a cui faccio riferimento non ha mai funzionato, cioè ha causato un errore

Discourse è l’unica cosa sul server

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

Controllo altre due istanze in esecuzione in container separati… il messaggio che @pfaffman ha segnalato

Stesso risultato con ./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

Sì. Non funzionerà. Non ha mai funzionato. Non so come qualcuno abbia suggerito che avrebbe funzionato. Non so come non mi sia accorto che qualcuno avesse suggerito che avrebbe funzionato. E il punto della configurazione a due container è che quasi mai si aggiornano i dati.

Se devi aggiornare i dati, devi arrestare solo web e poi ricostruire data, quindi web_only. Ho aggiornato l’OP.

Se ricevi errori di conflitto di porta, è probabile che quando docker si è riavviato abbia prima riavviato il vecchio container dell’app ed è quello che sta prendendo la porta. Puoi controllare con

docker ps

e vedere se app è in esecuzione. Si spera che lo sia, poiché ciò spiegherebbe il problema della porta.

Probabilmente devi

 docker stop app; docker rm app
2 Mi Piace