Ajuda! Upgrade causou falha total.

Olá,

Ao executar a atualização mais recente (algo da versão 6 para a 7), o comando rake db:migrate falhou devido a um suposto nome de usuário duplicado. Como não me sinto muito confortável com a linha de comando do Linux, tentei entrar no console do Rails para corrigir o problema, mas o console não carrega porque não conseguiu se conectar ao banco de dados. Em seguida, pesquisei no Google e tentei executar /etc/init.d/postgresql restart, mas isso falhou com a seguinte mensagem:

[....] Reiniciando servidor de banco de dados PostgreSQL 12: main[....] 
Erro: /usr/lib/postgresql/12/bin/pg_ctl /usr/lib/postgresql/12/bin/pg_ctl start -D /shared/postgres_data -l /var/log/postgresql/postgresql-12-main.log -s -o -c config_file="/etc/postgresql/12/main/postgresql.conf` saiu com status 1: 2021-03-08 20:19:10.354 UTC [763] 
FATAL: arquivos de banco de dados incompatíveis com o servidor 2021-03-08 20:19:10.354 UTC [763] 
DETALHE: O diretório de dados foi inicializado pela versão 13 do PostgreSQL, que não é compatível com esta versão 12.3 (Debian 12.3-1.pgdg100+1). p[FALHA: não foi possível iniciar o servidor. Examine a saída do log. ... falhou!
 falhou!

Tentei então /etc/init.d/postgresql restart version 12.3, o que não gerou erro, mas também não exibiu nenhuma outra mensagem. Ainda assim, é impossível fazer login no psql (pelo menos usando sudo -u postgres psql discourse, que encontrei neste fórum).

Alguém pode orientar sobre como restaurar o servidor? E por que a última atualização causou um erro tão grande? Usei a instalação de 30 minutos, tudo está o mais padrão possível. Também estou disposto a pagar alguém para corrigir isso.

@pfaffman é especialista nesse tipo de suporte, talvez você possa entrar em contato com ele.

Você tem o erro exato? Pode ser necessário rolar um pouco, mas estou curioso sobre:

  1. O nome da migração que falhou
  2. A instrução que causou a falha

Havia um bug em algum momento que permitia nomes de usuário com diferentes capitalizações. Depois, isso foi corrigido para que não aconteça mais.

Você pode ser capaz de levantar o antigo container e corrigi-lo pela interface de usuário.

Mas, se você não fez uma atualização via linha de comando há algum tempo, também há uma atualização de banco de dados, o que complica ainda mais as coisas.

Se não for muito pior do que isso, eu vou corrigir amanhã de manhã, horário do Pacífico Redirecting…

Se você quiser pagar mais para resolver isso hoje à noite, envie um e-mail para Jay@literatecomputing.com o quanto antes e eu poderei, pelo menos, colocá-lo de volta no ar.

Este é o resultado da interface web:

*** Por favor, seja paciente, as próximas etapas podem demorar um pouco ***
********************************************************
Reciclando Unicorn, para liberar memória
Reiniciando unicorn pid: 46
Aguardando o Unicorn recarregar.
Aguardando o Unicorn recarregar..
Aguardando o Unicorn recarregar...
Aguardando o Unicorn recarregar....
Aguardando o Unicorn recarregar.....
Aguardando o Unicorn recarregar......
Aguardando o Unicorn recarregar.......
Aguardando o Unicorn recarregar........
Aguardando o Unicorn recarregar.........
Aguardando o Unicorn recarregar..........
Aguardando o Unicorn recarregar...........
Aguardando o Unicorn recarregar............
Parando 3 worker(s) do Unicorn, para liberar memória
Parando fila de tarefas para recuperar memória, pid do mestre é 10397
$ cd /var/www/discourse && git fetch --tags --force && git reset --hard HEAD@{upstream}
From https://github.com/discourse/discourse
 t [tag update]            latest-release -> latest-release
 * [new tag]               v2.5.6         -> v2.5.6
Verificando arquivos:  87% (2225/2539)  
Verificando arquivos:  88% (2235/2539)  
Verificando arquivos:  89% (2260/2539)  
Verificando arquivos:  90% (2286/2539)  
Verificando arquivos:  91% (2311/2539)  
Verificando arquivos:  92% (2336/2539)  
Verificando arquivos:  93% (2362/2539)  
Verificando arquivos:  94% (2387/2539)  
Verificando arquivos:  95% (2413/2539)  
Verificando arquivos:  96% (2438/2539)  
Verificando arquivos:  97% (2463/2539)  
Verificando arquivos:  98% (2489/2539)  
Verificando arquivos:  99% (2514/2539)  
Verificando arquivos: 100% (2539/2539)  
Verificando arquivos: 100% (2539/2539), concluído.
HEAD está agora em 0da649e4fa DEV: adicionar nova saída de plugin ao modelo de tags (#12302)
$ bundle install --deployment --jobs 4 --without test development
[DEPRECATED] A flag `--deployment` está obsoleta porque depende de ser lembrada entre invocações do bundler, o que o bundler não fará mais em versões futuras. Em vez disso, use `bundle config set deployment 'true'`, e pare de usar esta flag
[DEPRECATED] A flag `--without` está obsoleta porque depende de ser lembrada entre invocações do bundler, o que o bundler não fará mais em versões futuras. Em vez disso, use `bundle config set without 'test development'`, e pare de usar esta flag
Aviso: a versão em execução do Bundler (2.1.4) é mais antiga que a versão que criou o lockfile (2.2.7). Sugerimos que você atualize para a versão que criou o lockfile executando `gem install bundler:2.2.7`.
Buscando metadados do gem em https://rubygems.org/............
Buscando https://github.com/discourse/mail.git
Buscando rake 13.0.3
Instalando rake 13.0.3
Buscando concurrent-ruby 1.1.8
Buscando minitest 5.14.4
Usando thread_safe 0.3.6
Buscando zeitwerk 2.4.2
Instalando zeitwerk 2.4.2
Instalando minitest 5.14.4
Instalando concurrent-ruby 1.1.8
Usando builder 3.2.4
Usando erubi 1.10.0
Buscando racc 1.5.2
Usando crass 1.0.6
Usando rack 2.2.3
Usando mini_mime 1.0.2
Usando public_suffix 4.0.6
Buscando aws-eventstream 1.1.1
Instalando racc 1.5.2 com extensões nativas
Instalando aws-eventstream 1.1.1
Usando aws-partitions 1.390.0
Usando jmespath 1.4.0
Usando ember-source 2.18.2
Usando execjs 2.7.0
Buscando msgpack 1.4.2
Instalando msgpack 1.4.2 com extensões nativas
Usando bundler 2.1.4
Usando byebug 11.1.3
Usando cbor 0.5.9.6
Buscando chunky_png 1.4.0
Instalando chunky_png 1.4.0
Usando coderay 1.1.3
Usando colored2 3.1.2
Usando connection_pool 2.2.3
Usando cppjieba_rb 0.3.3
Usando diffy 3.4.0
Usando method_source 1.0.0
Buscando openssl 2.2.0
Buscando thor 1.1.0
Usando discourse-ember-source 3.12.2.2
Buscando discourse-fonts 0.0.7
Instalando thor 1.1.0
Instalando openssl 2.2.0 com extensões nativas
Usando exifr 1.3.9
Usando fspath 3.1.2
Usando image_size 1.5.0
Usando in_threads 1.5.4
Usando progress 3.5.2
Usando email_reply_trimmer 0.1.13
Buscando excon 0.79.0
Instalando excon 0.79.0
Instalando discourse-fonts 0.0.7
Usando multipart-post 2.1.1
Buscando faraday-net_http 1.0.1
Buscando ruby2_keywords 0.0.4
Usando fast_blank 1.0.0
Usando fast_xs 0.8.0
Buscando fastimage 2.2.3
Instalando ruby2_keywords 0.0.4
Instalando faraday-net_http 1.0.1
Instalando fastimage 2.2.3
Buscando ffi 1.15.0
Usando gc_tracer 1.5.1
Usando guess_html_encoding 0.0.11
Usando hashie 4.1.0
Usando highline 2.0.3
Usando hkdf 0.3.0
Usando htmlentities 4.3.4
Usando http_accept_language 2.1.1
Buscando json 2.5.1
Usando jwt 2.2.2
Usando kgio 2.11.3
Usando libv8 8.4.255.0 (x86_64-linux)
Usando logstash-event 1.2.02
Buscando logster 2.9.6
Instalando json 2.5.1 com extensões nativas
Instalando logster 2.9.6
Instalando ffi 1.15.0 com extensões nativas
Usando lru_redux 1.1.0
Usando lz4-ruby 0.3.3
Usando maxminddb 0.1.22
Buscando memory_profiler 1.0.0
Instalando memory_profiler 1.0.0
Usando redis 4.2.5
Usando multi_json 1.15.0
Usando multi_xml 0.6.0
Usando mustache 1.1.1
Buscando mini_sql 1.0.1
Buscando nio4r 2.5.7
Instalando mini_sql 1.0.1
Instalando nio4r 2.5.7 com extensões nativas
Buscando oauth 0.5.5
Buscando oj 3.11.2
Instalando oauth 0.5.5
Instalando oj 3.11.2 com extensões nativas
Usando optimist 3.0.1
Usando pg 1.2.3
Usando r2 0.2.7
Usando raindrops 0.19.1
Usando rchardet 1.8.0
Usando rinku 2.0.6
Usando rotp 6.2.0
Buscando rqrcode_core 0.2.0
Usando rtlit 0.0.5
Usando rubyzip 2.3.0
Usando tilt 2.0.10
Usando sshkey 2.0.0
Usando stackprof 0.2.16
Usando unf_ext 0.0.7.7
Usando xorcist 1.1.2
Instalando rqrcode_core 0.2.0
Usando rack-test 1.1.0
Usando mail 2.8.0.edge de https://github.com/discourse/mail.git (em master@5b700fc)
Buscando tzinfo 1.2.9
Usando addressable 2.7.0
Usando request_store 1.5.0
Usando message_bus 3.3.4
Buscando rack-mini-profiler 2.3.1
Usando rack-protection 2.1.0
Usando aws-sigv4 1.2.2
Usando barber 0.12.2
Usando ember-data-source 3.0.2
Usando uglifier 4.2.0
Buscando i18n 1.8.9
Instalando i18n 1.8.9
Instalando tzinfo 1.2.9
Instalando rack-mini-profiler 2.3.1
Usando sprockets 3.7.2
Buscando bootsnap 1.7.2
Instalando bootsnap 1.7.2 com extensões nativas
Usando pry 0.13.1
Usando discourse_image_optim 0.26.2
Buscando nokogiri 1.11.1 (x86_64-linux)
Buscando openssl-signature_algorithm 1.1.1
Buscando faraday 1.3.0
Instalando openssl-signature_algorithm 1.1.1
Instalando faraday 1.3.0
Usando omniauth 1.9.1
Usando logstash-logger 0.26.1
Usando mini_racer 0.3.1
Usando webpush 1.1.0
Buscando sidekiq 6.1.3
Instalando sidekiq 6.1.3
Buscando redis-namespace 1.8.1
Instalando nokogiri 1.11.1 (x86_64-linux)
Instalando redis-namespace 1.8.1
Buscando mini_suffix 0.3.2
Instalando mini_suffix 0.3.2
Usando sassc 2.0.1
Usando rbtrace 0.4.14
Buscando unicorn 5.8.0
Buscando puma 5.2.2
Instalando unicorn 5.8.0 com extensões nativas
Instalando puma 5.2.2 com extensões nativas
Usando unf 0.1.4
Buscando rqrcode 1.2.0
Buscando css_parser 1.9.0
Usando aws-sdk-core 3.109.2
Usando ember-handlebars-template 0.8.0
Usando pry-byebug 3.9.0
Usando pry-rails 0.3.9
Buscando activesupport 6.0.3.5
Instalando css_parser 1.9.0
Instalando rqrcode 1.2.0
Instalando activesupport 6.0.3.5
Usando cose 1.2.0
Buscando omniauth-oauth 1.2.0
Instalando omniauth-oauth 1.2.0
Usando oauth2 1.4.4
Buscando mini_scheduler 0.13.0
Buscando loofah 2.9.0
Instalando mini_scheduler 0.13.0
Instalando loofah 2.9.0
Buscando nokogumbo 2.0.4
Usando ruby-readability 0.7.0
Usando aws-sdk-kms 1.39.0
Usando aws-sdk-sns 1.35.0
Buscando omniauth-oauth2 1.7.1
Instalando nokogumbo 2.0.4 com extensões nativas
Instalando omniauth-oauth2 1.7.1
Usando omniauth-twitter 1.4.0
Usando rails-html-sanitizer 1.3.0
Usando aws-sdk-s3 1.83.2
Usando omniauth-facebook 8.0.0
Usando omniauth-github 1.4.0
Buscando omniauth-google-oauth2 0.8.1
Instalando omniauth-google-oauth2 0.8.1
Usando rails-dom-testing 2.0.3
Usando globalid 0.4.2
Buscando actionview 6.0.3.5
Buscando activemodel 6.0.3.5
Buscando activejob 6.0.3.5
Instalando activejob 6.0.3.5
Instalando activemodel 6.0.3.5
Instalando actionview 6.0.3.5
Buscando sanitize 5.2.3
Instalando sanitize 5.2.3
Usando active_model_serializers 0.8.4
Buscando activerecord 6.0.3.5
Buscando onebox 2.2.6
Instalando activerecord 6.0.3.5
Instalando onebox 2.2.6
Buscando actionpack 6.0.3.5
Instalando actionpack 6.0.3.5
Usando actionview_precompiler 0.2.3
Buscando railties 6.0.3.5
Buscando actionmailer 6.0.3.5
Instalando actionmailer 6.0.3.5
Instalando railties 6.0.3.5
Usando sprockets-rails 3.2.2
Usando seed-fu 2.3.9
Usando jquery-rails 4.4.0
Usando lograge 0.11.2
Buscando rails_failover 0.6.5
Usando rails_multisite 2.5.0
Usando sassc-rails 2.1.2
Usando discourse-ember-rails 0.18.6
Instalando rails_failover 0.6.5
Bundle concluído! 124 dependências do Gemfile, 162 gems instaladas agora.
Gems nos grupos test e development não foram instaladas.
Gems agrupadas são instaladas em `./vendor/bundle`
$ bundle exec rake plugin:pull_compatible_all
discourse-legal-tools já está na versão compatível mais recente
docker_manager já está na versão compatível mais recente
$ SKIP_POST_DEPLOYMENT_MIGRATIONS=1 bundle exec rake multisite:migrate

--------------------------------------------------------------------------------
1 migração(s) falhou!

Falha ao migrar default
#<StandardError: Ocorreu um erro, esta e todas as migrações posteriores foram canceladas:

PG::UniqueViolation: ERROR:  valor de chave duplicada viola a restrição única "index_users_on_username"
DETALHE:  A chave (username)=(Martina_S) já existe.
>
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-mini-profiler-2.3.1/lib/patches/db/pg.rb:110:in `exec'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-mini-profiler-2.3.1/lib/patches/db/pg.rb:110:in `async_exec'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.5/lib/active_record/connection_adapters/postgresql/database_statements.rb:92:in `block (2 levels) in execute'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.5/lib/active_support/dependencies/interlock.rb:48:in `block in permit_concurrent_loads'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.5/lib/active_support/concurrency/share_lock.rb:187:in `yield_shares'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.5/lib/active_support/dependencies/interlock.rb:47:in `permit_concurrent_loads'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.5/lib/active_record/connection_adapters/postgresql/database_statements.rb:91:in `block in execute'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.5/lib/active_record/connection_adapters/abstract_adapter.rb:722:in `block (2 levels) in log'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.5/lib/active_support/concurrency/load_interlock_aware_monitor.rb:26:in `block (2 levels) in synchronize'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.5/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `handle_interrupt'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.5/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `block in synchronize'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.5/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `handle_interrupt'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.5/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `synchronize'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.5/lib/active_record/connection_adapters/abstract_adapter.rb:721:in `block in log'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.5/lib/active_support/notifications/instrumenter.rb:24:in `instrument'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.5/lib/active_record/connection_adapters/abstract_adapter.rb:712:in `log'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.5/lib/active_record/connection_adapters/postgresql/database_statements.rb:90:in `execute'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.5/lib/active_record/migration.rb:890:in `block in method_missing'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.5/lib/active_record/migration.rb:858:in `block in say_with_time'
/usr/local/lib/ruby/2.6.0/benchmark.rb:293:in `measure'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.5/lib/active_record/migration.rb:858:in `say_with_time'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.5/lib/active_record/migration.rb:879:in `method_missing'
/var/www/discourse/db/migrate/20210120125607_rename_english_locale.rb:17:in `rename_locale'
/var/www/discourse/db/migrate/20210120125607_rename_english_locale.rb:6:in `up'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.5/lib/active_record/migration.rb:831:in `exec_migration'
/var/www/discourse/lib/freedom_patches/schema_migration_details.rb:9:in `block in exec_migration'
/usr/local/lib/ruby/2.6.0/benchmark.rb:293:in `measure'
/var/www/discourse/lib/freedom_patches/schema_migration_details.rb:8:in `exec_migration'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.5/lib/active_record/migration.rb:812:in `block (2 levels) in migrate'
/usr/local/lib/ruby/2.6.0/benchmark.rb:293:in `measure'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.5/lib/active_record/migration.rb:811:in `block in migrate'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.5/lib/active_record/connection_adapters/abstract/connection_pool.rb:471:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.5/lib/active_record/migration.rb:810:in `migrate'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.5/lib/active_record/migration.rb:1002:in `migrate'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.5/lib/active_record/migration.rb:1310:in `block in execute_migration_in_transaction'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.5/lib/active_record/migration.rb:1361:in `block in ddl_transaction'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.5/lib/active_record/connection_adapters/abstract/database_statements.rb:280:in `block in transaction'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.5/lib/active_record/connection_adapters/abstract/transaction.rb:280:in `block in within_new_transaction'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.5/lib/active_support/concurrency/load_interlock_aware_monitor.rb:26:in `block (2 levels) in synchronize'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.5/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `handle_interrupt'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.5/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `block in synchronize'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.5/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `handle_interrupt'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.5/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `synchronize'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.5/lib/active_record/connection_adapters/abstract/transaction.rb:278:in `within_new_transaction'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.5/lib/active_record/connection_adapters/abstract/database_statements.rb:280:in `transaction'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.5/lib/active_record/transactions.rb:212:in `transaction'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.5/lib/active_record/migration.rb:1361:in `ddl_transaction'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.5/lib/active_record/migration.rb:1309:in `execute_migration_in_transaction'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.5/lib/active_record/migration.rb:1281:in `block in migrate_without_lock'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.5/lib/active_record/migration.rb:1280:in `each'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.5/lib/active_record/migration.rb:1280:in `migrate_without_lock'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.5/lib/active_record/migration.rb:1229:in `block in migrate'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.5/lib/active_record/migration.rb:1382:in `with_advisory_lock'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.5/lib/active_record/migration.rb:1229:in `migrate'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.5/lib/active_record/migration.rb:1061:in `up'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.5/lib/active_record/migration.rb:1036:in `migrate'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.5/lib/active_record/tasks/database_tasks.rb:238:in `migrate'
/var/www/discourse/lib/tasks/db.rake:184:in `block (2 levels) in <main>'
/var/www/discourse/lib/tasks/db.rake:148:in `block (3 levels) in execute_concurently'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rails_multisite-2.5.0/lib/rails_multisite/connection_management.rb:76:in `with_connection'
/var/www/discourse/lib/tasks/db.rake:146:in `block (2 levels) in execute_concurently'

Migrador multisite está em execução usando 1 threads

Migrando default
== 20201117212328 SetCategorySlugToLower: migrando ===========================
-- remove_index(:categories, {:name=>"unique_index_categories_on_slug"})
   -> 0.0069s
-- execute("UPDATE categories SET slug = LOWER(slug)")
   -> 0.0196s
-- add_index(:categories, "COALESCE(parent_category_id, -1), LOWER(slug)", {:name=>"unique_index_categories_on_slug", :where=>"slug != ''", :unique=>true})
   -> 0.0138s
== 20201117212328 SetCategorySlugToLower: migrado (0.0528s) ==================

== 20201210151635 CreateDoNotDisturbTimings: migrando ========================
-- create_table(:do_not_disturb_timings)
   -> 0.0192s
-- add_index(:do_not_disturb_timings, [:user_id], {:unique=>false})
   -> 0.0039s
-- add_index(:do_not_disturb_timings, [:starts_at], {:unique=>false})
   -> 0.0029s
-- add_index(:do_not_disturb_timings, [:ends_at], {:unique=>false})
   -> 0.0026s
== 20201210151635 CreateDoNotDisturbTimings: migrado (0.0296s) ===============

== 20201218000000 RemoveFlagWebHooks: migrando ===============================
-- execute("DELETE FROM web_hook_event_types_hooks\nWHERE web_hook_event_type_id = 7\n")
   -> 0.0005s
-- execute("DELETE FROM web_hook_event_types\nWHERE id = 7\n")
   -> 0.0004s
== 20201218000000 RemoveFlagWebHooks: migrado (0.0016s) ======================

== 20201218000001 RemoveQueuedPostWebHooks: migrando =========================
-- execute("DELETE FROM web_hook_event_types_hooks\nWHERE web_hook_event_type_id = 8\n")
   -> 0.0002s
-- execute("DELETE FROM web_hook_event_types\nWHERE id = 8\n")
   -> 0.0002s
== 20201218000001 RemoveQueuedPostWebHooks: migrado (0.0011s) ================

== 20201229031635 AddUserProfileIndexes: migrando ============================
-- execute("CREATE INDEX CONCURRENTLY IF NOT EXISTS index_topic_links_on_user_and_clicks\nON topic_links(user_id, clicks DESC, created_at DESC)\nWHERE (NOT reflection and NOT quote and NOT internal)\n")
   -> 0.2598s
-- execute("CREATE INDEX CONCURRENTLY IF NOT EXISTS index_posts_user_and_likes\nON posts(user_id, like_count desc, created_at desc)\nWHERE post_number > 1\n")
   -> 0.7620s
== 20201229031635 AddUserProfileIndexes: migrado (1.0231s) ===================

== 20210105165605 AddProcessedToNotifications: migrando ======================
== 20210105165605 AddProcessedToNotifications: migrado (0.0007s) =============

== 20210106181418 CreateUserNotificationSchedules: migrando ==================
-- create_table(:user_notification_schedules)
   -> 0.0043s
-- add_index(:user_notification_schedules, [:user_id])
   -> 0.0027s
-- add_index(:user_notification_schedules, [:enabled])
   -> 0.0024s
-- add_column(:do_not_disturb_timings, :scheduled, :boolean, {:default=>false})
   -> 0.0008s
-- add_index(:do_not_disturb_timings, [:scheduled])
   -> 0.0024s
== 20210106181418 CreateUserNotificationSchedules: migrado (0.0134s) =========

== 20210107005832 AddImapMissingColumnToIncomingEmail: migrando ==============
-- add_column(:incoming_emails, :imap_missing, :boolean, {:default=>false, :null=>false})
   -> 0.0013s
== 20210107005832 AddImapMissingColumnToIncomingEmail: migrado (0.0019s) =====

== 20210111025920 AddRejectReasonToReviewables: migrando =====================
-- add_column(:reviewables, :reject_reason, :text)
   -> 0.0008s
== 20210111025920 AddRejectReasonToReviewables: migrado (0.0015s) ============

== 20210119005647 AddCreatedViaToIncomingEmail: migrando =====================
-- add_column(:incoming_emails, :created_via, :integer, {:null=>true})
   -> 0.0006s
== 20210119005647 AddCreatedViaToIncomingEmail: migrado (0.0012s) ============

== 20210120125607 RenameEnglishLocale: migrando ==============================
-- execute("UPDATE users\nSET locale = 'en_GB'\nWHERE locale = 'en'\n")
   -> 0.0107s
-- execute("UPDATE site_settings\nSET value = 'en_GB'\nWHERE name = 'default_locale' AND value = 'en'\n")
   -> 0.0007s
-- execute("UPDATE translation_overrides\nSET locale = 'en_GB'\nWHERE locale = 'en'\n")
   -> 0.0004s
-- execute("UPDATE theme_translation_overrides\nSET locale = 'en_GB'\nWHERE locale = 'en'\n")
   -> 0.0005s
-- execute("UPDATE users\nSET locale = 'en'\nWHERE locale = 'en_US'\n")
Docker Manager: FALHA NA ATUALIZAÇÃO
#<RuntimeError: RuntimeError>
/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:196:in `run'
/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:100:in `upgrade'
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:19:in `block in <main>'
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:6:in `fork'
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:6:in `<main>'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.5.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:59:in `load'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.5.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:59:in `load'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.3/lib/rails/commands/runner/runner_command.rb:42:in `perform'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/thor-1.0.1/lib/thor/command.rb:27:in `run'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/thor-1.0.1/lib/thor/invocation.rb:127:in `invoke_command'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/thor-1.0.1/lib/thor.rb:392:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.3/lib/rails/command/base.rb:69:in `perform'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.3/lib/rails/command.rb:46:in `invoke'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.3/lib/rails/commands.rb:18:in `<main>'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.5.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `require'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.5.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `block in require_with_bootsnap_lfi'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.5.1/lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in `register'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.5.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require_with_bootsnap_lfi'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.5.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:31:in `require'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.3/lib/active_support/dependencies.rb:324:in `block in require'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.3/lib/active_support/dependencies.rb:291:in `load_dependency'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.3/lib/active_support/dependencies.rb:324:in `require'
bin/rails:17:in `<main>'
Iniciando 3 worker(s) do Unicorn que foram parados inicialmente

Em seguida, executei a atualização via SSH, na esperança de que fosse mais robusta (em 2020, houve alguns meses em que a interface web se recusava a atualizar qualquer coisa e eu sempre tinha que fazer via SSH). Quando digitei o comando de atualização na linha de comando, ele baixou uma série de coisas e, por fim, me disse para executar o comando rebuild app. Quando fiz isso, o mesmo erro ocorreu. Não posso atestar se as linhas ao redor eram as mesmas e não as copiei, mas definitivamente tinha esse problema de index_username_on_users no meio das migrações do banco de dados.

TL;DR: Se interpreto a saída corretamente, o problema ocorreu na migração RenameEnglishLocale no comando execute("UPDATE users SET locale = 'en' WHERE locale = 'en_US'").

Já vi esse erro antes; ele ocorre quando há uma corrupção interna na tabela de usuários.

De alguma forma, há um registro duplicado de “user” na tabela, que pode ter sido inserido em uma versão anterior, durante uma atualização ou devido a um desligamento abrupto. Ainda não sei exatamente por que isso acontece, mas já vi ocorrer.

Você tem duas alternativas:

  1. Se tiver sorte, execute ./launcher start app, depois rails c, em seguida DB.query('select * from users where username='Martina_S') e renomeie o último Martina_S para algo como Martina_S1.

  2. Se não tiver sorte, não conseguirá iniciar o aplicativo. Nesse caso, será necessário iniciar um contêiner de dados e executar o comando acima a partir do psql.

Obrigado pelas respostas rápidas! Como inicializo um contêiner de dados? Tentei ./launcher start app e depois rails c, mas o Rails não inicia porque o banco de dados não está rodando. Tentei /etc/init.d/postgresql restart, mas obtive o erro que você vê na postagem inicial, algo sobre a versão do PostgreSQL ser incompatível (o Debian LTS suporta apenas 12.x, enquanto a última atualização do Discourse parece ter migrado meus dados para a versão 13.0??). Eu não me importaria em corrigir isso via SQL, afinal sou desenvolvedor Rails, mas não tenho ideia de como consertar o que parece ser uma atualização mal-sucedida do PostgreSQL na linha de comando do Linux.

Procure no diretório de amostra um exemplo de contêiner de dados.

Você só precisa apontá-lo para o local correto, e então deverá ser capaz de entrar no contêiner e executar o psql.

Sim, você já foi atualizado para a versão 13.

@pfaffman corrigiu. Recomendo esse cara :slight_smile: