Помогите! Обновление привело к полному сбою

Здравствуйте,

При выполнении самого последнего обновления (вероятно, с версии 6 на 7) команда rake db:migrate завершилась ошибкой из-за предполагаемого дублирования имени пользователя. Поскольку я не очень уверенно чувствую себя в командной строке Linux, я попытался запустить консоль Rails, чтобы исправить проблему, но консоль не загрузилась, так как не смогла подключиться к базе данных. Затем я поискал в Google и попробовал выполнить /etc/init.d/postgresql restart, но это привело к ошибке:

[....] Перезапуск сервера базы данных PostgreSQL 12: main[....] 
Ошибка: /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` завершилась с кодом 1: 2021-03-08 20:19:10.354 UTC [763] 
FATAL: файлы базы данных несовместимы с сервером 2021-03-08 20:19:10.354 UTC [763] 
DETAIL: каталог данных был инициализирован с помощью PostgreSQL версии 13, который не совместим с этой версией 12.3 (Debian 12.3-1.pgdg100+1). p[FAIL: не удалось запустить сервер. Проверьте вывод журнала. ... ошибка!
 ошибка!

Затем я попытался выполнить /etc/init.d/postgresql restart version 12.3, это не вызвало ошибки, но и не вывело никаких других сообщений. И по-прежнему невозможно войти в psql (по крайней мере, используя sudo -u postgres psql discourse, что я нашёл на этом форуме).

Может ли кто-нибудь подсказать, как восстановить сервер? И почему последнее обновление вызвало такую серьёзную ошибку? Я использовал стандартную установку за 30 минут, всё настроено максимально стандартно. Я также готов заплатить кому-то за исправление этой проблемы.

@pfaffman специализируется на поддержке такого рода, возможно, стоит связаться с ним.

У вас есть точное сообщение об ошибке? Возможно, потребуется немного прокрутить страницу, но меня интересует:

  1. Название миграции, которая не удалась
  2. Инструкция, вызвавшая сбой

Где-то по пути появилась ошибка, позволявшая создавать имена пользователей с разным регистром букв. Позже это исправили, чтобы такого больше не происходило.

Вы, возможно, сможете запустить старый контейнер и исправить это через интерфейс.

Но если вы давно не выполняли обновление через командную строку, то также потребуется обновление базы данных, что ещё больше усложняет ситуацию.

Если проблема не настолько серьёзная, я исправлю её завтра утром по тихоокеанскому времени: Redirecting…

Если вы хотите заплатить больше, чтобы решить это сегодня вечером, напишите как можно скорее на Jay@literatecomputing.com, и я, возможно, смогу хотя бы восстановить работу системы.

В моем обновлении произошла ошибка

api_key = "a quick brown fox"
fetch("https://api.example.com/data", headers: { 'Authorization' => api_key })

Пожалуйста, помогите мне это исправить.

Это вывод из веб-интерфейса:

*** Пожалуйста, будьте терпеливы, следующие шаги могут занять некоторое время ***
********************************************************
Перезапуск Unicorn для освобождения памяти
Перезапуск unicorn pid: 46
Ожидание перезагрузки Unicorn.
Ожидание перезагрузки Unicorn..
Ожидание перезагрузки Unicorn...
Ожидание перезагрузки Unicorn....
Ожидание перезагрузки Unicorn.....
Ожидание перезагрузки Unicorn......
Ожидание перезагрузки Unicorn.......
Ожидание перезагрузки Unicorn........
Ожидание перезагрузки Unicorn.........
Ожидание перезагрузки Unicorn..........
Ожидание перезагрузки Unicorn...........
Ожидание перезагрузки Unicorn............
Остановка 3 рабочих процессов Unicorn для освобождения памяти
Остановка очереди задач для освобождения памяти, pid мастера: 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
Извлечение файлов:  87% (2225/2539)  
Извлечение файлов:  88% (2235/2539)  
Извлечение файлов:  89% (2260/2539)  
Извлечение файлов:  90% (2286/2539)  
Извлечение файлов:  91% (2311/2539)  
Извлечение файлов:  92% (2336/2539)  
Извлечение файлов:  93% (2362/2539)  
Извлечение файлов:  94% (2387/2539)  
Извлечение файлов:  95% (2413/2539)  
Извлечение файлов:  96% (2438/2539)  
Извлечение файлов:  97% (2463/2539)  
Извлечение файлов:  98% (2489/2539)  
Извлечение файлов:  99% (2514/2539)  
Извлечение файлов: 100% (2539/2539)  
Извлечение файлов: 100% (2539/2539), готово.
HEAD теперь указывает на 0da649e4fa DEV: добавить новый плагин outlet в шаблон тегов (#12302)
$ bundle install --deployment --jobs 4 --without test development
[УСТАРЕВШИЙ] Флаг `--deployment` устарел, поскольку он полагается на запоминание между вызовами bundler, чего bundler больше не будет делать в будущих версиях. Вместо этого, пожалуйста, используйте `bundle config set deployment 'true'` и прекратите использование этого флага
[УСТАРЕВШИЙ] Флаг `--without` устарел, поскольку он полагается на запоминание между вызовами bundler, чего bundler больше не будет делать в будущих версиях. Вместо этого, пожалуйста, используйте `bundle config set without 'test development'` и прекратите использование этого флага
Предупреждение: текущая версия Bundler (2.1.4) старше версии, которая создала файл блокировки (2.2.7). Мы рекомендуем вам обновиться до версии, которая создала файл блокировки, выполнив `gem install bundler:2.2.7`.
Получение метаданных gem из https://rubygems.org/............
Получение https://github.com/discourse/mail.git
Получение rake 13.0.3
Установка rake 13.0.3
Получение concurrent-ruby 1.1.8
Получение minitest 5.14.4
Использование thread_safe 0.3.6
Получение zeitwerk 2.4.2
Установка zeitwerk 2.4.2
Установка minitest 5.14.4
Установка concurrent-ruby 1.1.8
Использование builder 3.2.4
Использование erubi 1.10.0
Получение racc 1.5.2
Использование crass 1.0.6
Использование rack 2.2.3
Использование mini_mime 1.0.2
Использование public_suffix 4.0.6
Получение aws-eventstream 1.1.1
Установка racc 1.5.2 с нативными расширениями
Установка aws-eventstream 1.1.1
Использование aws-partitions 1.390.0
Использование jmespath 1.4.0
Использование ember-source 2.18.2
Использование execjs 2.7.0
Получение msgpack 1.4.2
Установка msgpack 1.4.2 с нативными расширениями
Использование bundler 2.1.4
Использование byebug 11.1.3
Использование cbor 0.5.9.6
Получение chunky_png 1.4.0
Установка chunky_png 1.4.0
Использование coderay 1.1.3
Использование colored2 3.1.2
Использование connection_pool 2.2.3
Использование cppjieba_rb 0.3.3
Использование diffy 3.4.0
Использование method_source 1.0.0
Получение openssl 2.2.0
Получение thor 1.1.0
Использование discourse-ember-source 3.12.2.2
Получение discourse-fonts 0.0.7
Установка thor 1.1.0
Установка openssl 2.2.0 с нативными расширениями
Использование exifr 1.3.9
Использование fspath 3.1.2
Использование image_size 1.5.0
Использование in_threads 1.5.4
Использование progress 3.5.2
Использование email_reply_trimmer 0.1.13
Получение excon 0.79.0
Установка excon 0.79.0
Установка discourse-fonts 0.0.7
Использование multipart-post 2.1.1
Получение faraday-net_http 1.0.1
Получение ruby2_keywords 0.0.4
Использование fast_blank 1.0.0
Использование fast_xs 0.8.0
Получение fastimage 2.2.3
Установка ruby2_keywords 0.0.4
Установка faraday-net_http 1.0.1
Установка fastimage 2.2.3
Получение ffi 1.15.0
Использование gc_tracer 1.5.1
Использование guess_html_encoding 0.0.11
Использование hashie 4.1.0
Использование highline 2.0.3
Использование hkdf 0.3.0
Использование htmlentities 4.3.4
Использование http_accept_language 2.1.1
Получение json 2.5.1
Использование jwt 2.2.2
Использование kgio 2.11.3
Использование libv8 8.4.255.0 (x86_64-linux)
Использование logstash-event 1.2.02
Получение logster 2.9.6
Установка json 2.5.1 с нативными расширениями
Установка logster 2.9.6
Установка ffi 1.15.0 с нативными расширениями
Использование lru_redux 1.1.0
Использование lz4-ruby 0.3.3
Использование maxminddb 0.1.22
Получение memory_profiler 1.0.0
Установка memory_profiler 1.0.0
Использование redis 4.2.5
Использование multi_json 1.15.0
Использование multi_xml 0.6.0
Использование mustache 1.1.1
Получение mini_sql 1.0.1
Получение nio4r 2.5.7
Установка mini_sql 1.0.1
Установка nio4r 2.5.7 с нативными расширениями
Получение oauth 0.5.5
Получение oj 3.11.2
Установка oauth 0.5.5
Установка oj 3.11.2 с нативными расширениями
Использование optimist 3.0.1
Использование pg 1.2.3
Использование r2 0.2.7
Использование raindrops 0.19.1
Использование rchardet 1.8.0
Использование rinku 2.0.6
Использование rotp 6.2.0
Получение rqrcode_core 0.2.0
Использование rtlit 0.0.5
Использование rubyzip 2.3.0
Использование tilt 2.0.10
Использование sshkey 2.0.0
Использование stackprof 0.2.16
Использование unf_ext 0.0.7.7
Использование xorcist 1.1.2
Установка rqrcode_core 0.2.0
Использование rack-test 1.1.0
Использование mail 2.8.0.edge из https://github.com/discourse/mail.git (на master@5b700fc)
Получение tzinfo 1.2.9
Использование addressable 2.7.0
Использование request_store 1.5.0
Использование message_bus 3.3.4
Получение rack-mini-profiler 2.3.1
Использование rack-protection 2.1.0
Использование aws-sigv4 1.2.2
Использование barber 0.12.2
Использование ember-data-source 3.0.2
Использование uglifier 4.2.0
Получение i18n 1.8.9
Установка i18n 1.8.9
Установка tzinfo 1.2.9
Установка rack-mini-profiler 2.3.1
Использование sprockets 3.7.2
Получение bootsnap 1.7.2
Установка bootsnap 1.7.2 с нативными расширениями
Использование pry 0.13.1
Использование discourse_image_optim 0.26.2
Получение nokogiri 1.11.1 (x86_64-linux)
Получение openssl-signature_algorithm 1.1.1
Получение faraday 1.3.0
Установка openssl-signature_algorithm 1.1.1
Установка faraday 1.3.0
Использование omniauth 1.9.1
Использование logstash-logger 0.26.1
Использование mini_racer 0.3.1
Использование webpush 1.1.0
Получение sidekiq 6.1.3
Установка sidekiq 6.1.3
Получение redis-namespace 1.8.1
Установка nokogiri 1.11.1 (x86_64-linux)
Установка redis-namespace 1.8.1
Получение mini_suffix 0.3.2
Установка mini_suffix 0.3.2
Использование sassc 2.0.1
Использование rbtrace 0.4.14
Получение unicorn 5.8.0
Получение puma 5.2.2
Установка unicorn 5.8.0 с нативными расширениями
Установка puma 5.2.2 с нативными расширениями
Использование unf 0.1.4
Получение rqrcode 1.2.0
Получение css_parser 1.9.0
Использование aws-sdk-core 3.109.2
Использование ember-handlebars-template 0.8.0
Использование pry-byebug 3.9.0
Использование pry-rails 0.3.9
Получение activesupport 6.0.3.5
Установка css_parser 1.9.0
Установка rqrcode 1.2.0
Установка activesupport 6.0.3.5
Использование cose 1.2.0
Получение omniauth-oauth 1.2.0
Установка omniauth-oauth 1.2.0
Использование oauth2 1.4.4
Получение mini_scheduler 0.13.0
Получение loofah 2.9.0
Установка mini_scheduler 0.13.0
Установка loofah 2.9.0
Получение nokogumbo 2.0.4
Использование ruby-readability 0.7.0
Использование aws-sdk-kms 1.39.0
Использование aws-sdk-sns 1.35.0
Получение omniauth-oauth2 1.7.1
Установка nokogumbo 2.0.4 с нативными расширениями
Установка omniauth-oauth2 1.7.1
Использование omniauth-twitter 1.4.0
Использование rails-html-sanitizer 1.3.0
Использование aws-sdk-s3 1.83.2
Использование omniauth-facebook 8.0.0
Использование omniauth-github 1.4.0
Получение omniauth-google-oauth2 0.8.1
Установка omniauth-google-oauth2 0.8.1
Использование rails-dom-testing 2.0.3
Использование globalid 0.4.2
Получение actionview 6.0.3.5
Получение activemodel 6.0.3.5
Получение activejob 6.0.3.5
Установка activejob 6.0.3.5
Установка activemodel 6.0.3.5
Установка actionview 6.0.3.5
Получение sanitize 5.2.3
Установка sanitize 5.2.3
Использование active_model_serializers 0.8.4
Получение activerecord 6.0.3.5
Получение onebox 2.2.6
Установка activerecord 6.0.3.5
Установка onebox 2.2.6
Получение actionpack 6.0.3.5
Установка actionpack 6.0.3.5
Использование actionview_precompiler 0.2.3
Получение railties 6.0.3.5
Получение actionmailer 6.0.3.5
Установка actionmailer 6.0.3.5
Установка railties 6.0.3.5
Использование sprockets-rails 3.2.2
Использование seed-fu 2.3.9
Использование jquery-rails 4.4.0
Использование lograge 0.11.2
Получение rails_failover 0.6.5
Использование rails_multisite 2.5.0
Использование sassc-rails 2.1.2
Использование discourse-ember-rails 0.18.6
Установка rails_failover 0.6.5
Сборка завершена! 124 зависимостей Gemfile, 162 gem'ов теперь установлены.
Gem'ы в группах test и development не были установлены.
Установленные gem'ы находятся в `./vendor/bundle`
$ bundle exec rake plugin:pull_compatible_all
discourse-legal-tools уже имеет последнюю совместимую версию
docker_manager уже имеет последнюю совместимую версию
$ SKIP_POST_DEPLOYMENT_MIGRATIONS=1 bundle exec rake multisite:migrate

--------------------------------------------------------------------------------
1 миграция не удалась!

Не удалось выполнить миграцию для default
#<StandardError: Произошла ошибка, эта и все последующие миграции отменены:

PG::UniqueViolation: ERROR:  дублирующее значение ключа нарушает ограничение уникальности "index_users_on_username"
DETAIL:  Ключ (username)=(Martina_S) уже существует.
>
/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'

Миграция multisite выполняется с использованием 1 потока

Миграция default
== 20201117212328 SetCategorySlugToLower: migrating ===========================
-- 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: migrated (0.0528s) ==================

== 20201210151635 CreateDoNotDisturbTimings: migrating ========================
-- 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: migrated (0.0296s) ===============

== 20201218000000 RemoveFlagWebHooks: migrating ===============================
-- 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: migrated (0.0016s) ======================

== 20201218000001 RemoveQueuedPostWebHooks: migrating =========================
-- 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: migrated (0.0011s) ================

== 20201229031635 AddUserProfileIndexes: migrating ============================
-- 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: migrated (1.0231s) ===================

== 20210105165605 AddProcessedToNotifications: migrating ======================
== 20210105165605 AddProcessedToNotifications: migrated (0.0007s) =============

== 20210106181418 CreateUserNotificationSchedules: migrating ==================
-- 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: migrated (0.0134s) =========

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

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

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

== 20210120125607 RenameEnglishLocale: migrating ==============================
-- 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: НЕ УДАЛОСЬ ОБНОВИТЬ
#<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>'
Запуск 3 рабочих процессов Unicorn, которые были остановлены изначально

Затем я запустил обновление через SSH, надеясь, что это будет более надежно (в 2020 году было несколько месяцев, когда веб-интерфейс отказывался обновлять что-либо, и мне всегда приходилось использовать SSH). Когда я ввел команду обновления в командной строке, она скачала кучу вещей и в конце концов сказала мне выполнить команду rebuild app. Когда я это сделал, произошла та же ошибка. Я не могу подтвердить, были ли окружающие строки такими же, и я не копировал их, но в середине миграций базы данных определенно была эта проблема с index_username_on_users.

TL;DR: Если я правильно интерпретирую вывод, проблема возникла в миграции RenameEnglishLocale при выполнении команды execute("UPDATE users SET locale = 'en' WHERE locale = 'en_US'").

Я встречал эту ошибку раньше: она возникает при внутренней повреждённости таблицы пользователей.

Где-то в таблице появилась дублирующаяся запись «user» — она могла появиться в предыдущей версии, во время обновления или при некорректном завершении работы. Я до сих пор точно не знаю, почему это происходит, но сам сталкивался с этим.

У вас есть два варианта:

  1. Если вам повезёт, выполните ./launcher start app, затем rails c, затем DB.query('select * from users where username='Martina_S'), после чего переименуйте последнюю запись Martina_S в что-то вроде Martina_S1.

  2. Если вам не повезёт, вы не сможете запустить приложение. В этом случае вам потребуется загрузить контейнер с данными и выполнить вышеуказанные действия из psql.

Спасибо за ваши быстрые ответы! Как запустить контейнер с данными? Я попробовал ./launcher start app, а затем rails c, но Rails не запускается, потому что база данных не работает. Я попытался выполнить /etc/init.d/postgresql restart, но получил ошибку, которую вы видите в первоначальном сообщении: что-то о несовместимости версии PostgreSQL (Debian LTS поддерживает только версию 12.x, а кажется, что последнее обновление Discourse перенесло мои данные на версию 13.0??). Я бы не против исправить это с помощью SQL, ведь я разработчик на Rails, но у меня нет представления, как исправить то, что выглядит как неудачное обновление PostgreSQL в командной строке Linux.

Посмотрите в каталоге sample на пример контейнера с данными

Вам нужно просто указать правильный путь, и тогда вы сможете зайти в контейнер и запустить psql

Да, вы уже обновились до версии 13

@pfaffman исправил. Рекомендую этого парня :slight_smile: