Atualização do PostgreSQL 18 para self-hosters

Recomendamos que você teste o processo, já que não é algo que oferecemos suporte, mas provavelmente tudo o que você precisará fazer é informar que deseja fazer a atualização e tudo ficará bem.

3 Curtiram

Acabei de fazer a atualização para o PostgreSQL 18 em uma instalação padrão e em um container duplo sem nenhum problema. Obrigado mais uma vez ao @chrisr e à equipe pelas instruções fáceis de seguir.

Para uma configuração de container duplo atrás do CDN do Cloudflare com buckets de upload/backup no R2, os passos que usei foram os seguintes:

Passo 1: limpeza do disco

# remove todos os dados não utilizados do docker
docker system prune -a -f
# limpa logs antigos e cache do apt
journalctl --vacuum-time=2d
apt-get clean
apt-get autoremove -y
# verifica o tamanho do banco de dados
du -sh /var/discourse/shared/data/postgres_data
# verifica o espaço livre disponível
df -h -x tmpfs -x devtmpfs

Passo 2: manutenção e backup

  1. edite uma página de manutenção do Cloudflare para informar sobre uma atualização de manutenção do sistema de 15-20 minutos e defina um temporizador de recarregamento (pode não levar tanto tempo, mas é melhor prevenir!). Ative uma rota de worker do Cloudflare para exibir a página de manutenção.

  1. acione um backup via linha de comando:
cd /var/discourse
./launcher enter web_only
discourse backup
exit
  1. faça login no painel do Cloudflare R2 e verifique a pasta de backup para confirmar que o arquivo de backup foi enviado com sucesso

Passo 3: desligamento seguro

  1. pare o container web primeiro para encerrar quaisquer conexões ativas, depois pare o container do banco de dados:
cd /var/discourse
./launcher stop web_only
./launcher stop data
  1. verifique se o PostgreSQL foi desligado corretamente:
tail -n 20 shared/data/log/var-log/postgres/current

Passo 4: reconstrução da atualização

execute os seguintes comandos nesta ordem:

./launcher rebuild data # despeja, migra e restaura o postgresql 18
./launcher rebuild data # reconstrói o container do banco de dados
./launcher rebuild web_only # reconstrói o aplicativo web

Passo 5: otimização e limpeza

  1. gere as estatísticas de tabela pg18 ausentes, caso contrário o fórum ficará mais lento do que o normal:
docker exec -u postgres data /usr/lib/postgresql/18/bin/vacuumdb -d discourse --analyze-in-stages
  1. teste o fórum para garantir que tudo esteja funcionando - a página de manutenção não deve mais estar carregando se você tiver um temporizador de recarregamento definido nela.
  2. remova a rota do worker do Cloudflare para a página de manutenção (não queremos atingir o limite diário de 100.000!)
  3. exclua os dados antigos do pg18 para recuperar esse espaço em disco:
rm -fr /var/discourse/shared/data/postgres_data_old/

concluído! :partying_face: :clinking_beer_mugs:

5 Curtiram

Para a opção 1, você precisaria ter aquele espaço extra montado no container onde o processo de atualização o usaria, mas ainda assim teria que contornar a verificação de espaço, acho?

Acho que pode ser um problema de ovo e galinha.

Se seu site de staging usa um banco de dados diferente, ele não está realmente verificando tudo? Se quiser manter isso, faça um backup, exclua o postgres_data e reconstrua o container com um banco de dados vazio, depois restaure o backup.

Mas o que você realmente deve fazer é criar o novo servidor pg18, apontar o servidor de staging para ele para verificar se funciona e depois migrar o servidor de produção para ele.

1 Curtiu

Eu recebi a seguinte mensagem de erro durante a atualização:

Parando o servidor de banco de dados PostgreSQL 15:
main.Parando o servidor de banco de dados PostgreSQL 18:
mainErro: O cluster é propriedade do grupo com ID 993, que não existe ... falhou!
falhou!

O truque para corrigir isso foi excluir os restos da atualização antiga e corrigir as permissões:

rm -rf /var/discourse/shared/standalone/postgres_data_new
chown -R 999:999 /var/discourse/shared/standalone/postgres_data

… Depois disso, execute ./launcher rebuild app duas vezes e, opcionalmente (se a migração tiver sido concluída e tudo estiver funcionando), ./launcher cleanup.

Espero que isso ajude. :slight_smile:

4 Curtiram

Estou executando um ambiente de desenvolvimento com DevContainers no Windows, há alguma maneira de corrigir esse erro?

discourse@ddf88cb78939:/workspace/discourse$ bin/dev
[rails] Iniciando Pitchfork...
[ember] Iniciando servidor de desenvolvimento rolldown...
[rails] Iniciando observador de alterações de CSS
[rails] URGENTE: Falha ao inicializar padrão do site: ActiveRecord::ConnectionNotEstablished conexão com o servidor no soquete "/var/run/postgresql/.s.PGSQL.5432" falhou: Arquivo ou diretório não encontrado
[rails]         O servidor está em execução localmente e aceitando conexões nesse soquete?
[rails] conexão com o servidor no soquete "/run/postgresql/.s.PGSQL.5432" falhou: Arquivo ou diretório não encontrado
[rails]         O servidor está em execução localmente e aceitando conexões nesse soquete?
[rails] conexão com o servidor no soquete "/tmp/.s.PGSQL.5432" falhou: Arquivo ou diretório não encontrado
[rails]         O servidor está em execução localmente e aceitando conexões nesse soquete?
[rails] 
[rails] /workspace/discourse/config/initializers/000-pg_connection_patch.rb:35:in 'ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.new_client'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/postgresql_adapter.rb:944:in 'ActiveRecord::ConnectionAdapters::PostgreSQLAdapter#connect'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/postgresql_adapter.rb:956:in 'ActiveRecord::ConnectionAdapters::PostgreSQLAdapter#reconnect'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/abstract_adapter.rb:670:in 'block (2 levels) inActiveRecord::ConnectionAdapters::AbstractAdapter#reconnect!'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/abstract_adapter.rb:1224:in 'ActiveRecord::ConnectionAdapters::AbstractAdapter#attempt_configure_connection'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/abstract_adapter.rb:669:in 'block in ActiveRecord::ConnectionAdapters::AbstractAdapter#reconnect!'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/activesupport-8.0.5.1/lib/active_support/concurrency/null_lock.rb:9:in 'ActiveSupport::Concurrency::NullLock#synchronize'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/abstract_adapter.rb:668:in 'ActiveRecord::ConnectionAdapters::AbstractAdapter#reconnect!'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/abstract_adapter.rb:778:in 'block in ActiveRecord::ConnectionAdapters::AbstractAdapter#verify!'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/activesupport-8.0.5.1/lib/active_support/concurrency/null_lock.rb:9:in 'ActiveSupport::Concurrency::NullLock#synchronize'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/abstract_adapter.rb:766:in 'ActiveRecord::ConnectionAdapters::AbstractAdapter#verify!'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/abstract_adapter.rb:786:in 'ActiveRecord::ConnectionAdapters::AbstractAdapter#connect!'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/abstract_adapter.rb:992:in 'block in ActiveRecord::ConnectionAdapters::AbstractAdapter#with_raw_connection'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/activesupport-8.0.5.1/lib/active_support/concurrency/null_lock.rb:9:in 'ActiveSupport::Concurrency::NullLock#synchronize'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/abstract_adapter.rb:991:in 'ActiveRecord::ConnectionAdapters::AbstractAdapter#with_raw_connection'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/postgresql/quoting.rb:128:in 'ActiveRecord::ConnectionAdapters::PostgreSQL::Quoting#quote_string'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/abstract/quoting.rb:76:in 'ActiveRecord::ConnectionAdapters::Quoting#quote'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/postgresql/quoting.rb:122:in 'ActiveRecord::ConnectionAdapters::PostgreSQL::Quoting#quote'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/postgresql/schema_statements.rb:1142:in 'ActiveRecord::ConnectionAdapters::PostgreSQL::SchemaStatements#quoted_scope'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/postgresql/schema_statements.rb:1119:in 'ActiveRecord::ConnectionAdapters::PostgreSQL::SchemaStatements#data_source_sql'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/abstract/schema_statements.rb:60:in 'ActiveRecord::ConnectionAdapters::SchemaStatements#table_exists?'
[rails] /workspace/discourse/lib/site_settings/db_provider.rb:58:in 'SiteSettings::DbProvider#table_exists?'
[rails] /workspace/discourse/lib/site_settings/db_provider.rb:14:in 'SiteSettings::DbProvider#all'
[rails] /workspace/discourse/lib/site_setting_extension.rb:1286:in 'SiteSettingExtension#fetch_setting_hash_from_provider'
[rails] /workspace/discourse/lib/site_setting_extension.rb:602:in 'block in SiteSettingExtension#refresh!'
[rails] /workspace/discourse/lib/site_setting_extension.rb:598:in 'Thread::Mutex#synchronize'
[rails] /workspace/discourse/lib/site_setting_extension.rb:598:in 'SiteSettingExtension#refresh!'
[rails] /workspace/discourse/config/initializers/005-site_settings.rb:19:in 'block (2 levels) in "<main>'
[rails] /workspace/discourse/lib/freedom_patches/rails_multisite.rb:15:in 'block in RailsMultisite::ConnectionManagement.safe_each_connection'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/rails_multisite-7.0.0/lib/rails_multisite/connection_management/null_instance.rb:49:in 'RailsMultisite::ConnectionManagement::NullInstance#with_connection'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/rails_multisite-7.0.0/lib/rails_multisite/connection_management/null_instance.rb:36:in 'RailsMultisite::ConnectionManagement::NullInstance#each_connection'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/rails_multisite-7.0.0/lib/rails_multisite/connection_management.rb:17:in 'RailsMultisite::ConnectionManagement.each_connection'
[rails] /workspace/discourse/lib/freedom_patches/rails_multisite.rb:9:in 'RailsMultisite::ConnectionManagement.each_active_connection'
[rails] /workspace/discourse/lib/freedom_patches/rails_multisite.rb:14:in 'RailsMultisite::ConnectionManagement.safe_each_connection'
[rails] /workspace/discourse/config/initializers/005-site_settings.rb:18:in 'block in <main>'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/activesupport-8.0.5.1/lib/active_support/callbacks.rb:406:in 'BasicObject#instance_exec'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/activesupport-8.0.5.1/lib/active_support/callbacks.rb:406:in 'block in ActiveSupport::Callbacks::CallTemplate::InstanceExec0#make_lambda'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/activesupport-8.0.5.1/lib/active_support/callbacks.rb:178:in 'block in ActiveSupport::Callbacks::Filters::Before#call'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/activesupport-8.0.5.1/lib/active_support/callbacks.rb:668:in 'block (2 levels) in ActiveSupport::Callbacks::CallbackChain#default_terminator'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/activesupport-8.0.5.1/lib/active_support/callbacks.rb:667:in 'Kernel#catch'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/activesupport-8.0.5.1/lib/active_support/callbacks.rb:667:in 'block in ActiveSupport::Callbacks::CallbackChain#default_terminator'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/activesupport-8.0.5.1/lib/active_support/callbacks.rb:179:in 'ActiveSupport::Callbacks::Filters::Before#call'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/activesupport-8.0.5.1/lib/active_support/callbacks.rb:559:in 'block in ActiveSupport::Callbacks::CallbackSequence#invoke_before'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/activesupport-8.0.5.1/lib/active_support/callbacks.rb:559:in 'Array#each'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/activesupport-8.0.5.1/lib/active_support/callbacks.rb:559:in 'ActiveSupport::Callbacks::CallbackSequence#invoke_before'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/activesupport-8.0.5.1/lib/active_support/callbacks.rb:108:in 'ActiveSupport::Callbacks#run_callbacks'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/activesupport-8.0.5.1/lib/active_support/reloader.rb:96:in 'ActiveSupport::Reloader.prepare!'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/railties-8.0.5.1/lib/rails/application/finisher.rb:73:in 'block in <module:Finisher>'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/railties-8.0.5.1/lib/rails/initializable.rb:32:in 'BasicObject#instance_exec'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/railties-8.0.5.1/lib/rails/initializable.rb:32:in 'Rails::Initializable::Initializer#run'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/railties-8.0.5.1/lib/rails/initializable.rb:61:in 'block in Rails::Initializable#run_initializers'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/tsort-0.2.0/lib/tsort.rb:231:in 'block in TSort.tsort_each'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/tsort-0.2.0/lib/tsort.rb:353:in 'block (2 levels) in TSort.each_strongly_connected_component'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/tsort-0.2.0/lib/tsort.rb:434:in 'TSort.each_strongly_connected_component_from'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/tsort-0.2.0/lib/tsort.rb:352:in 'block in TSort.each_strongly_connected_component'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/tsort-0.2.0/lib/tsort.rb:350:in 'Rails::Initializable::Collection#each'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/tsort-0.2.0/lib/tsort.rb:350:in 'Method#call'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/tsort-0.2.0/lib/tsort.rb:350:in 'TSort.each_strongly_connected_component'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/tsort-0.2.0/lib/tsort.rb:229:in 'TSort.tsort_each'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/tsort-0.2.0/lib/tsort.rb:208:in 'TSort#tsort_each'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/railties-8.0.5.1/lib/rails/initializable.rb:60:in 'Rails::Initializable#run_initializers'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/railties-8.0.5.1/lib/rails/application.rb:444:in 'Rails::Application#initialize!'
[rails] /workspace/discourse/config/environment.rb:7:in '<top (required)>'
[rails] /usr/local/lib/ruby/3.4.0/bundled_gems.rb:82:in 'Kernel.require'
[rails] /usr/local/lib/ruby/3.4.0/bundled_gems.rb:82:in 'block (2 levels) in Kernel#replace_require'
[rails] config.ru:8:in 'block in <main>'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/rack-2.2.23/lib/rack/builder.rb:125:in 'BasicObject#instance_eval'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/rack-2.2.23/lib/rack/builder.rb:125:in 'Rack::Builder#initialize'
[rails] config.ru:3:in 'Class#new'
[rails] config.ru:3:in '<main>'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork.rb:91:in 'Kernel#eval'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork.rb:91:in 'block in Pitchfork.builder'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork/http_server.rb:1160:in 'Pitchfork::HttpServer#build_app!'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork/http_server.rb:694:in 'block in Pitchfork::HttpServer#spawn_initial_mold'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork.rb:170:in 'block in Pitchfork.clean_fork'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork.rb:168:in 'Kernel#catch'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork.rb:168:in 'Pitchfork.clean_fork'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork/http_server.rb:690:in 'Pitchfork::HttpServer#spawn_initial_mold'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork/http_server.rb:176:in 'Pitchfork::HttpServer#start'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/pitchfork-0.18.2/exe/pitchfork:110:in '<top (required)>'
[rails] /workspace/discourse/bin/pitchfork:58:in 'Kernel#load'
[rails] /workspace/discourse/bin/pitchfork:58:in 'block in <main>'
[rails] /workspace/discourse/bin/pitchfork:58:in 'Kernel#fork'
[rails] /workspace/discourse/bin/pitchfork:58:in '<main>'
[rails] /workspace/discourse/config/initializers/000-pg_connection_patch.rb:35:in 'ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.new_client': conexão ao servidor no soquete "/var/run/postgresql/.s.PGSQL.5432" falhou: Arquivo ou diretório inexistente (ActiveRecord::ConnectionNotEstablished)
[rails]         O servidor está rodando localmente e aceitando conexões nesse soquete?
[rails] conexão ao servidor no soquete "/run/postgresql/.s.PGSQL.5432" falhou: Arquivo ou diretório inexistente
[rails]         O servidor está rodando localmente e aceitando conexões nesse soquete?
[rails] conexão ao servidor no soquete "/tmp/.s.PGSQL.5432" falhou: Arquivo ou diretório inexistente
[rails]         O servidor está rodando localmente e aceitando conexões nesse soquete?
[rails] 
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/postgresql_adapter.rb:944:in 'ActiveRecord::ConnectionAdapters::PostgreSQLAdapter#connect'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/postgresql_adapter.rb:956:in 'ActiveRecord::ConnectionAdapters::PostgreSQLAdapter#reconnect'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/abstract_adapter.rb:670:in 'block (2 levels) in ActiveRecord::ConnectionAdapters::AbstractAdapter#reconnect!'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/abstract_adapter.rb:1224:in 'ActiveRecord::ConnectionAdapters::AbstractAdapter#attempt_configure_connection'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/abstract_adapter.rb:669:in 'block in ActiveRecord::ConnectionAdapters::AbstractAdapter#reconnect!'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activesupport-8.0.5.1/lib/active_support/concurrency/null_lock.rb:9:in 'ActiveSupport::Concurrency::NullLock#synchronize'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/abstract_adapter.rb:668:in 'ActiveRecord::ConnectionAdapters::AbstractAdapter#reconnect!'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/abstract_adapter.rb:778:in 'block in ActiveRecord::ConnectionAdapters::AbstractAdapter#verify!'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activesupport-8.0.5.1/lib/active_support/concurrency/null_lock.rb:9:in 'ActiveSupport::Concurrency::NullLock#synchronize'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/abstract_adapter.rb:766:in 'ActiveRecord::ConnectionAdapters::AbstractAdapter#verify!'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/abstract_adapter.rb:786:in 'ActiveRecord::ConnectionAdapters::AbstractAdapter#connect!'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/abstract_adapter.rb:992:in 'block in ActiveRecord::ConnectionAdapters::AbstractAdapter#with_raw_connection'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activesupport-8.0.5.1/lib/active_support/concurrency/null_lock.rb:9:in 'ActiveSupport::Concurrency::NullLock#synchronize'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/abstract_adapter.rb:991:in 'ActiveRecord::ConnectionAdapters::AbstractAdapter#with_raw_connection'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/postgresql/quoting.rb:128:in 'ActiveRecord::ConnectionAdapters::PostgreSQL::Quoting#quote_string'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/abstract/quoting.rb:76:in 'ActiveRecord::ConnectionAdapters::Quoting#quote'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/postgresql/quoting.rb:122:in 'ActiveRecord::ConnectionAdapters::PostgreSQL::Quoting#quote'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/postgresql/schema_statements.rb:1142:in 'ActiveRecord::ConnectionAdapters::PostgreSQL::SchemaStatements#quoted_scope'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/postgresql/schema_statements.rb:1119:in 'ActiveRecord::ConnectionAdapters::PostgreSQL::SchemaStatements#data_source_sql'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/abstract/schema_statements.rb:45:in 'ActiveRecord::ConnectionAdapters::SchemaStatements#data_source_exists?'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/schema_migration.rb:102:in 'block in ActiveRecord::SchemaMigration#table_exists?'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:422:in'ActiveRecord::ConnectionAdapters::ConnectionPool#with_connection'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/schema_migration.rb:101:in 'ActiveRecord::SchemaMigration#table_exists?'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/migration.rb:1282:in 'ActiveRecord::MigrationContext#get_all_versions'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/migration.rb:1299:in 'ActiveRecord::MigrationContext#pending_migration_versions'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/migration.rb:1295:in 'ActiveRecord::MigrationContext#needs_migration?'
[rails]         from /workspace/discourse/config/initializers/100-flags.rb:6:in 'block in <main>'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activesupport-8.0.5.1/lib/active_support/callbacks.rb:406:in 'BasicObject#instance_exec'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activesupport-8.0.5.1/lib/active_support/callbacks.rb:406:in 'block in ActiveSupport::Callbacks::CallTemplate::InstanceExec0#make_lambda'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activesupport-8.0.5.1/lib/active_support/callbacks.rb:178:in 'block in ActiveSupport::Callbacks::Filters::Before#call'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activesupport-8.0.5.1/lib/active_support/callbacks.rb:668:in 'block (2 levels) in ActiveSupport::Callbacks::CallbackChain#default_terminator'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activesupport-8.0.5.1/lib/active_support/callbacks.rb:667:in 'Kernel#catch'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activesupport-8.0.5.1/lib/active_support/callbacks.rb:667:in 'block in ActiveSupport::Callbacks::CallbackChain#default_terminator'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activesupport-8.0.5.1/lib/active_support/callbacks.rb:179:in 'ActiveSupport::Callbacks::Filters::Before#call'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activesupport-8.0.5.1/lib/active_support/callbacks.rb:559:in 'block in ActiveSupport::Callbacks::CallbackSequence#invoke_before'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activesupport-8.0.5.1/lib/active_support/callbacks.rb:559:in 'Array#each'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activesupport-8.0.5.1/lib/active_support/callbacks.rb:559:in 'ActiveSupport::Callbacks::CallbackSequence#invoke_before'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activesupport-8.0.5.1/lib/active_support/callbacks.rb:108:in 'ActiveSupport::Callbacks#run_callbacks'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activesupport-8.0.5.1/lib/active_support/reloader.rb:96:in 'ActiveSupport::Reloader.prepare!'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/railties-8.0.5.1/lib/rails/application/finisher.rb:73:in 'block in <module:Finisher>'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/railties-8.0.5.1/lib/rails/initializable.rb:32:in 'BasicObject#instance_exec'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/railties-8.0.5.1/lib/rails/initializable.rb:32:in 'Rails::Initializable::Initializer#run'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/railties-8.0.5.1/lib/rails/initializable.rb:61:in 'block in Rails::Initializable#run_initializers'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/tsort-0.2.0/lib/tsort.rb:231:in 'block in TSort.tsort_each'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/tsort-0.2.0/lib/tsort.rb:353:in 'block (2 levels) in TSort.each_strongly_connected_component'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/tsort-0.2.0/lib/tsort.rb:434:in 'TSort.each_strongly_connected_component_from'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/tsort-0.2.0/lib/tsort.rb:352:in 'block in TSort.each_strongly_connected_component'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/tsort-0.2.0/lib/tsort.rb:350:in 'Rails::Initializable::Collection#each'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/tsort-0.2.0/lib/tsort.rb:350:in 'Method#call'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/tsort-0.2.0/lib/tsort.rb:350:in 'TSort.each_strongly_connected_component'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/tsort-0.2.0/lib/tsort.rb:229:in 'TSort.tsort_each'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/tsort-0.2.0/lib/tsort.rb:208:in 'TSort#tsort_each'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/railties-8.0.5.1/lib/rails/initializable.rb:60:in 'Rails::Initializable#run_initializers'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/railties-8.0.5.1/lib/rails/application.rb:444:in 'Rails::Application#initialize!'
[rails]         from /workspace/discourse/config/environment.rb:7:in '<top (required)>'
[rails]         from /usr/local/lib/ruby/3.4.0/bundled_gems.rb:82:in 'Kernel.require'
[rails]         from /usr/local/lib/ruby/3.4.0/bundled_gems.rb:82:in 'block (2 levels) in Kernel#replace_require'
[rails]         from config.ru:8:in 'block in <main>'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/rack-2.2.23/lib/rack/builder.rb:125:in 'BasicObject#instance_eval'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/rack-2.2.23/lib/rack/builder.rb:125:in 'Rack::Builder#initialize'
[rails]         from config.ru:3:in 'Class#new'
[rails]         from config.ru:3:in '<main>'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork.rb:91:in 'Kernel#eval'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork.rb:91:in 'block in Pitchfork.builder'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork/http_server.rb:1160:in 'Pitchfork::HttpServer#build_app!'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork/http_server.rb:694:in 'block in Pitchfork::HttpServer#spawn_initial_mold'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork.rb:170:in 'block in Pitchfork.clean_fork'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork.rb:168:in 'Kernel#catch'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork.rb:168:in 'Pitchfork.clean_fork'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork/http_server.rb:690:in 'Pitchfork::HttpServer#spawn_initial_mold'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork/http_server.rb:176:in 'Pitchfork::HttpServer#start'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/pitchfork-0.18.2/exe/pitchfork:110:in '<top (required)>'
[rails]         from /workspace/discourse/bin/pitchfork:58:in 'Kernel#load'
[rails]         from /workspace/discourse/bin/pitchfork:58:in 'block in <main>'
[rails]         from /workspace/discourse/bin/pitchfork:58:in 'Kernel#fork'
[rails]         from /workspace/discourse/bin/pitchfork:58:in '<main>'
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/pg-1.6.3-x86_64-linux/lib/pg/connection.rb:944:in 'PG::Connection.connect_start': conexão ao servidor no soquete "/var/run/postgresql/.s.PGSQL.5432" falhou: Arquivo ou diretório inexistente (PG::ConnectionBad)
[rails]         O servidor está rodando localmente e aceitando conexões nesse soquete?
[rails] conexão ao servidor no soquete "/run/postgresql/.s.PGSQL.5432" falhou: Arquivo ou diretório inexistente
[rails]         O servidor está rodando localmente e aceitando conexões nesse soquete?
[rails] conexão ao servidor no soquete "/tmp/.s.PGSQL.5432" falhou: Arquivo ou diretório inexistente
[rails]         O servidor está rodando localmente e aceitando conexões nesse soquete?
[rails] 
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/pg-1.6.3-x86_64-linux/lib/pg/connection.rb:944:in 'PG::Connection.connect_to_hosts'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/pg-1.6.3-x86_64-linux/lib/pg/connection.rb:871:in 'PG::Connection.new'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/pg-1.6.3-x86_64-linux/lib/pg.rb:88:in 'PG.connect'
[rails]         from /workspace/discourse/config/initializers/000-pg_connection_patch.rb:5:in 'ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.new_client'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/postgresql_adapter.rb:944:in 'ActiveRecord::ConnectionAdapters::PostgreSQLAdapter#connect'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/postgresql_adapter.rb:956:in 'ActiveRecord::ConnectionAdapters::PostgreSQLAdapter#reconnect'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/abstract_adapter.rb:670:in 'block (2 levels) in ActiveRecord::ConnectionAdapters::AbstractAdapter#reconnect!'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/abstract_adapter.rb:1224:in 'ActiveRecord::ConnectionAdapters::AbstractAdapter#attempt_configure_connection'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/abstract_adapter.rb:669:in 'block in ActiveRecord::ConnectionAdapters::AbstractAdapter#reconnect!'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activesupport-8.0.5.1/lib/active_support/concurrency/null_lock.rb:9:in 'ActiveSupport::Concurrency::NullLock#synchronize'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/abstract_adapter.rb:668:in 'ActiveRecord::ConnectionAdapters::AbstractAdapter#reconnect!'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/abstract_adapter.rb:778:in 'block in ActiveRecord::ConnectionAdapters::AbstractAdapter#verify!'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activesupport-8.0.5.1/lib/active_support/concurrency/null_lock.rb:9:in 'ActiveSupport::Concurrency::NullLock#synchronize'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/abstract_adapter.rb:766:in 'ActiveRecord::ConnectionAdapters::AbstractAdapter#verify!'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/abstract_adapter.rb:786:in 'ActiveRecord::ConnectionAdapters::AbstractAdapter#connect!'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/abstract_adapter.rb:992:in 'block in ActiveRecord::ConnectionAdapters::AbstractAdapter#with_raw_connection'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activesupport-8.0.5.1/lib/active_support/concurrency/null_lock.rb:9:in 'ActiveSupport::Concurrency::NullLock#synchronize'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/abstract_adapter.rb:991:in 'ActiveRecord::ConnectionAdapters::AbstractAdapter#with_raw_connection'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/postgresql/quoting.rb:128:in 'ActiveRecord::ConnectionAdapters::PostgreSQL::Quoting#quote_string'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/abstract/quoting.rb:76:in 'ActiveRecord::ConnectionAdapters::Quoting#quote'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/postgresql/quoting.rb:122:in 'ActiveRecord::ConnectionAdapters::PostgreSQL::Quoting#quote'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/postgresql/schema_statements.rb:1142:in 'ActiveRecord::ConnectionAdapters::PostgreSQL::SchemaStatements#quoted_scope'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/postgresql/schema_statements.rb:1119:in 'ActiveRecord::ConnectionAdapters::PostgreSQL::SchemaStatements#data_source_sql'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/abstract/schema_statements.rb:45:in 'ActiveRecord::ConnectionAdapters::SchemaStatements#data_source_exists?'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/schema_migration.rb:102:in 'block in ActiveRecord::SchemaMigration#table_exists?'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:422:in'ActiveRecord::ConnectionAdapters::ConnectionPool#with_connection'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/schema_migration.rb:101:in 'ActiveRecord::SchemaMigration#table_exists?'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/migration.rb:1282:in 'ActiveRecord::MigrationContext#get_all_versions'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/migration.rb:1299:in 'ActiveRecord::MigrationContext#pending_migration_versions'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activerecord-8.0.5.1/lib/active_record/migration.rb:1295:in 'ActiveRecord::MigrationContext#needs_migration?'
[rails]         from /workspace/discourse/config/initializers/100-flags.rb:6:in 'block in <main>'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activesupport-8.0.5.1/lib/active_support/callbacks.rb:406:in 'BasicObject#instance_exec'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activesupport-8.0.5.1/lib/active_support/callbacks.rb:406:in 'block in ActiveSupport::Callbacks::CallTemplate::InstanceExec0#make_lambda'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activesupport-8.0.5.1/lib/active_support/callbacks.rb:178:in 'block in ActiveSupport::Callbacks::Filters::Before#call'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activesupport-8.0.5.1/lib/active_support/callbacks.rb:668:in 'block (2 levels) in ActiveSupport::Callbacks::CallbackChain#default_terminator'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activesupport-8.0.5.1/lib/active_support/callbacks.rb:667:in 'Kernel#catch'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activesupport-8.0.5.1/lib/active_support/callbacks.rb:667:in 'block in ActiveSupport::Callbacks::CallbackChain#default_terminator'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activesupport-8.0.5.1/lib/active_support/callbacks.rb:179:in 'ActiveSupport::Callbacks::Filters::Before#call'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activesupport-8.0.5.1/lib/active_support/callbacks.rb:559:in 'block in ActiveSupport::Callbacks::CallbackSequence#invoke_before'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activesupport-8.0.5.1/lib/active_support/callbacks.rb:559:in 'Array#each'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activesupport-8.0.5.1/lib/active_support/callbacks.rb:559:in 'ActiveSupport::Callbacks::CallbackSequence#invoke_before'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activesupport-8.0.5.1/lib/active_support/callbacks.rb:108:in 'ActiveSupport::Callbacks#run_callbacks'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/activesupport-8.0.5.1/lib/active_support/reloader.rb:96:in 'ActiveSupport::Reloader.prepare!'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/railties-8.0.5.1/lib/rails/application/finisher.rb:73:in 'block in <module:Finisher>'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/railties-8.0.5.1/lib/rails/initializable.rb:32:in 'BasicObject#instance_exec'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/railties-8.0.5.1/lib/rails/initializable.rb:32:in 'Rails::Initializable::Initializer#run'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/railties-8.0.5.1/lib/rails/initializable.rb:61:in 'block in Rails::Initializable#run_initializers'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/tsort-0.2.0/lib/tsort.rb:231:in 'block in TSort.tsort_each'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/tsort-0.2.0/lib/tsort.rb:353:in 'block (2 levels) in TSort.each_strongly_connected_component'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/tsort-0.2.0/lib/tsort.rb:434:in 'TSort.each_strongly_connected_component_from'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/tsort-0.2.0/lib/tsort.rb:352:in 'block in TSort.each_strongly_connected_component'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/tsort-0.2.0/lib/tsort.rb:350:in 'Rails::Initializable::Collection#each'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/tsort-0.2.0/lib/tsort.rb:350:in 'Method#call'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/tsort-0.2.0/lib/tsort.rb:350:in 'TSort.each_strongly_connected_component'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/tsort-0.2.0/lib/tsort.rb:229:in 'TSort.tsort_each'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/tsort-0.2.0/lib/tsort.rb:208:in 'TSort#tsort_each'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/railties-8.0.5.1/lib/rails/initializable.rb:60:in 'Rails::Initializable#run_initializers'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/railties-8.0.5.1/lib/rails/application.rb:444:in 'Rails::Application#initialize!'
[rails]         from /workspace/discourse/config/environment.rb:7:in '<top (required)>'
[rails]         from /usr/local/lib/ruby/3.4.0/bundled_gems.rb:82:in 'Kernel.require'
[rails]         from /usr/local/lib/ruby/3.4.0/bundled_gems.rb:82:in 'block (2 levels) in Kernel#replace_require'
[rails]         from config.ru:8:in 'block in <main>'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/rack-2.2.23/lib/rack/builder.rb:125:in 'BasicObject#instance_eval'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/rack-2.2.23/lib/rack/builder.rb:125:in 'Rack::Builder#initialize'
[rails]         from config.ru:3:in 'Class#new'
[rails]         from config.ru:3:in '<main>'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork.rb:91:in 'Kernel#eval'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork.rb:91:in 'block in Pitchfork.builder'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork/http_server.rb:1160:in 'Pitchfork::HttpServer#build_app!'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork/http_server.rb:694:in 'block in Pitchfork::HttpServer#spawn_initial_mold'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork.rb:170:in 'block in Pitchfork.clean_fork'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork.rb:168:in 'Kernel#catch'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork.rb:168:in 'Pitchfork.clean_fork'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork/http_server.rb:690:in 'Pitchfork::HttpServer#spawn_initial_mold'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork/http_server.rb:176:in 'Pitchfork::HttpServer#start'
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/pitchfork-0.18.2/exe/pitchfork:110:in '<top (required)>'
[rails]         from /workspace/discourse/bin/pitchfork:58:in 'Kernel#load'
[rails]         from /workspace/discourse/bin/pitchfork:58:in 'block in <main>'
[rails]         from /workspace/discourse/bin/pitchfork:58:in 'Kernel#fork'
[rails]         from /workspace/discourse/bin/pitchfork:58:in '<main>'
[rails] mold gen=0 pid=6050 reaped (#<Process::Status: pid 6050 exit 1>)
[rails] /home/discourse/.bundle/gems/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork/http_server.rb:179:in 'Pitchfork::HttpServer#start': The initial mold failed to boot (Pitchfork::BootFailure)
[rails]         from /home/discourse/.bundle/gems/ruby/3.4.0/gems/pitchfork-0.18.2/exe/pitchfork:110:in '<top (required)>'
[rails]         from /workspace/discourse/bin/pitchfork:58:in 'Kernel#load'
[rails]         from /workspace/discourse/bin/pitchfork:58:in 'block in <main>'
[rails]         from /workspace/discourse/bin/pitchfork:58:in 'Kernel#fork'
[rails]         from /workspace/discourse/bin/pitchfork:58:in '<main>'
[rails] /workspace/discourse/bin/pitchfork exited with code 0
--> Sending SIGTERM to other processes..
[ember] ./rolldown.mjs exited with code SIGTERM
discourse@ddf88cb78939:/workspace/discourse$

Pode ser apenas um palpite, mas será que o Discourse está confundindo as versões?

discourse@ddf88cb78939:/workspace/discourse$ sudo cat /shared/postgres_data/PG_VERSION
sudo cat /shared/postgres_data_orig/PG_VERSION
15
18

EDIÇÃO: Corrigido com a ajuda do ChatGPT. Eu não sou um especialista em Linux/Postgres.

2 Curtiram

Estou enfrentando um problema: o PostgreSQL 18 está ausente ou não está migrando o banco de dados do meu segundo site. Qualquer ajuda a respeito disso será bem-vinda.

1 Curtiu

Tenho uma correção pendente para as atualizações de multisite quebradas; vou atualizá-lo quando estiver pronta.

1 Curtiu

Acabei de integrar uma correção para multisites e todos os bancos de dados agora devem fazer a atualização corretamente. Você pode reverter seu banco de dados para o estado anterior à atualização e tentar novamente seguindo os passos abaixo:

  1. Confirme que os dados antigos ainda existem em /shared/postgres_data_old.
  2. Exclua os dados da atualização falha de /shared/postgres_data (se você tiver espaço livre suficiente no disco, pode ser uma boa ideia renomeá-los por enquanto, em vez de excluí-los).
  3. Renomeie /shared/postgres_data_old de volta para /shared/postgres_data. Você também precisará garantir que o modo do diretório seja 0700, caso contrário, o Postgres se recusará a usá-lo.
  4. Inicie a atualização novamente executando ./launcher rebuild app.
3 Curtiram

Acho que eles resolveram o problema há algumas horas

2 Curtiram

Obrigado, muito apreciado.

Notei isso nas mensagens de reconstrução:

116:C 11 Aug 2026 06:43:27.336 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can also cause failures without low memory condition, see vm.max_map_count growing steadily when vm.overcommit_memory is 2 · Issue #1328 · jemalloc/jemalloc · GitHub. To fix this issue add ‘vm.overcommit_memory = 1’ to /etc/sysctl.conf and then reboot or run the command ‘sysctl vm.overcommit_memory=1’ for this to take effect.

Isso é motivo de preocupação?

Também observo que o novo tamanho do meu banco de dados é significativamente menor que o antigo:

root@Forum:/var/discourse/shared/standalone# du -sh postgres_data postures_data_old
6.8G  postgres_data
10G   postgres_data_old
17G	total

Isso deve ser motivo de preocupação?

Esse nome de diretório é estranho?

Para comparação, o meu ficou assim:

:/var/discourse/shared/data# du -sh postgres_data postgres_data_old
4.1G    postgres_data
3.4G    postgres_data_old

Sim, acho que a correção de tipo acabou corrompendo isso de alguma forma. É postgres_data.

Então seus novos dados eram maiores. Isso é um pouco preocupante.

1 Curtiu

Executei a atualização conforme as instruções e tudo correu muito bem. A primeira reconstrução resultou em uma mensagem no console informando que a atualização da versão 15 foi concluída com sucesso, juntamente com a localização do antigo banco de dados e instruções para executar a reconstrução mais uma vez.

graças à dica da Lilly

consegui ver que tinha espaço suficiente no disco

EDIÇÃO: para acrescentar

Obrigado a todos que trabalharam neste excelente trabalho :+1:

1 Curtiu

Eu provavelmente adicionaria o curinga, caso haja resíduos de atualizações:

# verificar tamanho do banco de dados
du -sh /var/discourse/shared/data/postgres_data*
1 Curtiu

vrrrmmmmmm :car::collision:

Como você pode imaginar, não recebi esse memorando… ué! :distorted_face:

1 Curtiu

Bom, eu não tinha ideia sobre esta atualização do banco de dados e os requisitos de espaço. Recebi uma mensagem de erro do PostgreSQL indicando que faltavam 12 GB de espaço, e o aplicativo não reiniciava. Limpei o disco e consegui liberar cerca de 6 GB, executei novamente, mas ainda sem sucesso.

Não perdi tempo e fiz a restauração do backup.

1 Curtiu

você sempre pode fazer um @pfaffman e migrar para um servidor completamente novo, começando com uma instalação totalmente nova do PG 18 e, para completar, a última versão LTS do Ubuntu…

2 Curtiram

Obrigado. Farei uma migração de teste para verificar:

Enquanto acompanho de perto este tópico.