Falla la compilación debido a incompatibilidad de versión de ruby

Después de usar por algunos días
./launcher bootstrap web_only && ./launcher destroy web_only && ./launcher start web_only sin problemas
Tuve problemas después de intentar usar la consola de rails para establecer SiteSetting.can_permanently_delete = true
usando ./launcher enter web_only y luego rails c

Pregunta: ¿Se accede a la consola de rails de manera diferente en el modo de contenedor separado?

Después de no lograr una reconstrucción y un arranque exitosos, revertí el servidor un par de días antes de implementar las cosas de IA. ¡Sin suerte!
El método de arranque falla 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

./launcher rebuild web_only también da error

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

Después de actualizar Docker Manager desde Administración obtengo

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

Pregunta: ¿Tienen alguna idea de lo que está pasando?

Aquí está el error que provoca el fallo de la compilación:

[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

Necesitas desplazarte hacia arriba para encontrar el error.

3 Me gusta

Sí, he hecho eso pero nunca veo nada útil.
Aquí está lo último.
exitcode18.txt (43.5 KB)

Aquí está el error:

[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

¿Tienes Discourse Docker fijado a una versión antigua? O, podría ser un error, pero parece poco probable que tal error pase la prueba de compilación.

Gracias Jay. Vi eso, pero los mensajes extraños no son tan infrecuentes con las compilaciones exitosas.

No, seguí al OP como mencioné.

@pfaffman ¡Gracias por el movimiento!

1 me gusta

¿Puedes extraer /var/discourse? La reconstrucción debe realizarse utilizando la imagen base 2.0.20260209-1300

1 me gusta

Gracias por intervenir @supermathie

Se está utilizando la 2.0.20260209-1300
desde una reconstrucción nueva con ./launcher rebuild web_only

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

end of 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)

Edición
Creo que el pecado original comenzó con la conversión a dos contenedores.

algo en su servidor ya está utilizando el puerto 80 y debe detenerse

Pero dijiste que había estado funcionando y que habías hecho varias reconstrucciones.

Discourse es lo único en el servidor

Lo hice y lo hago :grinning_face:

Hay tres opciones de reconstrucción en la publicación original. La que yo referencio nunca ha funcionado, es decir, ha causado un fallo.

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

Comprobando otras dos instancias que ejecutan contenedores separados… el mensaje que señaló @pfaffman

Mismo resultado con ./launcher bootstrap web_only &amp;&amp; ./launcher destroy web_only &amp;&amp; ./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í. Eso no funcionará. Nunca ha funcionado. No sé cómo alguien sugirió que lo haría. No sé cómo no me di cuenta de que alguien sugirió que lo haría. Y el punto de la configuración de dos contenedores es que casi nunca se actualizan los datos.

Si necesita actualizar los datos, entonces necesita apagar solo web y luego reconstruir datos, luego web_only. Actualicé el OP.

Si obtiene errores de conflicto de puertos, es probable que se deba a que cuando docker se reinició, primero reinició el contenedor de la aplicación antiguo y es lo que está tomando el puerto. Puede verificar con

docker ps

y ver si app se está ejecutando. Espera que lo esté, ya que eso explicará el problema del puerto.
Probablemente necesite

 docker stop app; docker rm app
2 Me gusta