После обновления сайт не открылся и не загрузил резервную базу данных

Я обновил сайт, и после этого начались ошибки nginx. Я не мог получить доступ к сайту. Что бы я ни делал, ничего не помогало. Поэтому я установил новую версию и попытался добавить вчерашние данные о еде. Однако и в этом случае у меня не получилось. При восстановлении из резервной копии я получаю следующую ошибку:

ошибка завершена:

CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX
ERROR: unrecognized parameter "dims"
EXCEPTION: psql failed: ERROR: unrecognized parameter "dims"
/var/www/discourse/lib/backup_restore/database_restorer.rb:92:in `restore_dump'
/var/www/discourse/lib/backup_restore/database_restorer.rb:26:in `restore'
/var/www/discourse/lib/backup_restore/restorer.rb:51:in `run'
script/discourse:149:in `restore'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/thor-1.3.0/lib/thor/command.rb:28:in `run'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/thor-1.3.0/lib/thor/invocation.rb:127:in `invoke_command'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/thor-1.3.0/lib/thor.rb:527:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/thor-1.3.0/lib/thor/base.rb:584:in `start'
script/discourse:290:in `<top (required)>'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:58:in `load'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:58:in `kernel_load'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli/exec.rb:23:in `run'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli.rb:451:in `exec'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/command.rb:28:in `run'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor.rb:527:in `dispatch'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli.rb:34:in `dispatch'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/vendor/thor/lib/thor/base.rb:584:in `start'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/cli.rb:28:in `start'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/exe/bundle:28:in `block in <top (required)>'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/lib/bundler/friendly_errors.rb:117:in `with_friendly_errors'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.5.3/exe/bundle:20:in `<top (required)>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Попытка отката...
Откат...
Очистка временных файлов...
Удаление функций из схемы discourse_functions...
Удаление временной директории '/var/www/discourse/tmp/restores/default/2024-02-18-120937'...
Возобновление работы sidekiq...
Отметка восстановления как завершенного...
Уведомление 'system' об окончании восстановления...
Готово!
[FAILED]
Восстановление завершено.

При обновлении файла app.yml, который используется для сборки кодов pgembeddings:

hooks:
  after_code:
    - exec:
        cd: $home
        cmd:
          - sudo apt-get install wget ca-certificates
    - exec:
        cd: $home
        cmd:
          - wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
    - exec:
        cd: $home
        cmd:
          - sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'
    - exec:
        cd: $home
        cmd:
          - apt-get update
    - exec:
        cd: $home
        cmd:
          - apt-get -y install -y postgresql-server-dev-${PG_MAJOR}
    - exec:
        cd: $home/tmp
        cmd:
          - git clone https://github.com/neondatabase/pg_embedding.git
    - exec:
        cd: $home/tmp/pg_embedding
        cmd:
          - make PG_CONFIG=/usr/lib/postgresql/13/bin/pg_config
    - exec:
        cd: $home/tmp/pg_embedding
        cmd:
          - make PG_CONFIG=/usr/lib/postgresql/13/bin/pg_config install
    - exec:
        cd: $home
        cmd:
          - su postgres -c 'psql discourse -c "create extension if not exists embedding;"'
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/discourse-question-answer.git
          - git clone https://github.com/discourse/discourse-solved.git
          - git clone https://github.com/discourse/discourse-gamification.git
          - git clone https://github.com/discourse/discourse-restricted-replies.git
          - git clone https://github.com/discourse/discourse-saved-searches.git
          - git clone https://github.com/discourse/discourse-follow.git
          - git clone https://github.com/discourse/discourse-yearly-review.git
          - git clone https://github.com/discourse/discourse-voting.git
          - git clone https://github.com/discourse/discourse-no-bump.git
          - git clone https://github.com/discourse/discourse-math.git
          - git clone https://github.com/discourse/discourse-akismet.git
          - git clone https://github.com/discourse/discourse-adplugin.git
          - git clone https://github.com/spirobel/discourse-matheditor.git
          - git clone https://github.com/discourse/discourse-google-one-tap.git
          - git clone https://github.com/merefield/discourse-chatbot.git
          - git clone https://github.com/discourse/discourse-ai.git
#          - git clone https://github.com/paviliondev/discourse-custom-wizard.git
          - git clone https://github.com/discourse/discourse-reactions.git
#          - git clone https://github.com/discourse/discourse-subscriptions.git

Я посмотрел это вместе с @kuaza, учитывая его опыт работы с моим плагином.

Мы удалили проблемный индекс из dump.sql, который вызывал ошибку выше, и восстановили его.

Существовал обновлённый скрипт для удаления этого индекса, но некоторые пользователи плагина могли не получить это обновление.

Сейчас у нас есть сборка, но нет соединения с браузера.

Контейнер снова запущен без проблемного индекса, и все старые скрипты в app.yml для создания pgembedding удалены, так что система чистая, но с плагинами.

Контейнер запущен — вы можете зайти в него без проблем.

psql, по-видимому, запущен — вы можете открыть приглашение базы данных внутри контейнера без проблем.

Внутри контейнера вы можете запустить rails c без ошибок.

/var/discourse/shared/standalone/log/rails# tail -n 200 production.log

не показывает никаких очевидных сообщений об ошибках.

Сейчас я в тупике.

Есть ли идеи, что ещё можно проверить?

Я пропустил одну проверку…

Зайти в контейнер и выполнить это:

curl 0.0.0.0:3000

Попробую это следующим…

Когда вы это делаете, появляются коды страницы настройки HTML. Я думаю, что проблема вызвана DNS. И этот бред меня доводит.

Когда я запустил это, казалось, что всё работает, но на самом деле проблема заключалась в том, что веб-сервер не функционировал, и мы не можем интерпретировать это таким образом. Когда мы заходим в контейнер и запускаем этот код, мы можем проверить, запущен ли nginx:

nginx -t

Однако я хотел бы ответить на проблему в этой теме, скопировав решение из вашего сообщения. Проблема с nginx совершенно иная: я тестирую её на отдельном домене с чистой установкой. Если ошибка повторится, я открою отдельный тикет и сообщу об этом.

Проблема с неработающим резервным копированием в теме вызвана таблицей или записью, которые больше не используются. Я полагаю, что это была запись, которую плагин чат-бота больше не использует, но она не была удалена во время обновления. Думаю, автор плагина уже решил эту проблему, так что вы можете быть спокойны :slight_smile: Я удалил строку с ошибкой, повторно упаковал плагин и установил его через панель администратора — всё работает без проблем. Также вы можете скачать его с сервера:

Пояснение по исправлению повреждённого файла плагина в is:

  • Распакуйте резервную копию: tar -xvzf foo.tar.gz
  • Распакуйте файл dump.sql
  • Удалите проблемные строки, создающие ненужный индекс:
--
-- TOC entry 8020 (class 1259 OID 84313)
-- Name: hnsw_index_on_chatbot_post_embeddings; Type: INDEX; Schema: public; Owner: -
--

CREATE INDEX hnsw_index_on_chatbot_post_embeddings ON public.chatbot_post_embeddings_old USING hnsw (embedding) WITH (dims='1536', m='64', efconstruction='64', efsearch='64');
  • Снова упакуйте файл dump.sql в архив
  • Поместите его в каталог вместе с папкой uploads
  • Упакуйте всё это в tar.gz
  • Вручную восстановите этот файл

Если у вас возникает ошибка, связанная с другой таблицей, думаю, проблема будет решена, если вы удалите таблицу, содержащую эту запись, используя описанный выше метод.

Мой сайт, над которым я так усердно работал и который начинал расти, был недоступен два дня. Не забывайте о бессонной ночи и целом дне. Такие ситуации могут случиться с каждым. Не забывайте делать резервные копии и проверять, что они работают. Хочу поблагодарить моего брата @merefield за помощь в этом процессе. Вместе мы узнали много нового.

Этот метод мне помог, когда я столкнулся с той же ошибкой. Спасибо за публикацию.