Falha na compilação devido a incompatibilidade de versão do ruby

Após alguns dias de uso
./launcher bootstrap web_only && ./launcher destroy web_only && ./launcher start web_only sem problemas
Encontrei problemas depois de tentar usar o console rails para definir SiteSetting.can_permanently_delete = true
usando ./launcher enter web_only e depois rails c

Pergunta: O console rails é acessado de forma diferente no modo de contêiner separado?

Depois de não conseguir uma reconstrução e inicialização bem-sucedidas, reverti o servidor para alguns dias antes de implementar as coisas de IA. Sem sorte!
O método de inicialização falha com:

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 também falha com erro

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

Após atualizar o Docker Manager pelo Admin, recebo

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

Pergunta: Vocês têm alguma ideia do que está acontecendo?

Aqui está o erro que causa a falha na compilação:

[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

Você precisa rolar para cima para encontrar o erro.

3 curtidas

Sim, eu fiz isso, mas nunca vejo nada útil.
Aqui está o mais recente.
exitcode18.txt (43,5 KB)

Aqui está o erro:

[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'
Sua versão do Ruby é 3.3.8, mas seu Gemfile especificou ~\u003e 3.4

Você tem o discourse Docker fixado em uma versão antiga? Ou, pode ser um bug, mas parece improvável que tal bug passasse no teste de compilação.

Obrigado Jay. Eu vi isso, mas mensagens estranhas não são incomuns com compilações bem-sucedidas.

Não, segui o OP como mencionado.

@pfaffman Obrigado pela mudança!

1 curtida

Você pode puxar /var/discourse? A reconstrução deve ser feita usando a imagem base 2.0.20260209-1300

1 curtida

Obrigado por participar @supermathie

Está sendo usada a 2.0.20260209-1300
a partir de uma reconstrução recente com ./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

fim da compilação

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)

Edição
Estou pensando que o pecado original começou com a conversão para dois contêineres.

algo no seu servidor já está usando a porta 80 e precisa ser parado

Mas você disse que estava funcionando e que você tinha feito várias reconstruções.

O Discourse é a única coisa no servidor

Eu fiz e faço :grinning_face:

Existem três opções de reconstrução na postagem original. Aquela a que me refiro nunca funcionou, ou seja, causou falha.

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

Verificando outras duas instâncias executando contêineres separados… a mensagem que @pfaffman apontou

Mesmo resultado com ./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

Sim. Isso não vai funcionar. Nunca funcionou. Eu não sei como alguém sugeriu que funcionaria. Eu não sei como eu não percebi que alguém sugeriu que funcionaria. E o ponto da configuração de dois contêineres é que você quase nunca atualiza os dados.

Se você precisar atualizar os dados, então você precisa desligar apenas o web e então reconstruir os dados, depois o web_only. Eu atualizei o OP.

Se você receber erros de conflito de porta, é provável que quando o docker reiniciou, ele primeiro reiniciou o contêiner antigo do aplicativo e é ele que está pegando a porta. Você pode verificar com

docker ps

e ver se app está rodando. Você espera que esteja, pois isso explicará o problema da porta.
Você provavelmente precisa

 docker stop app; docker rm app
2 curtidas