Проблемы миграции, связанные с DiscourseJsProcessor?

Привет, @david, у меня возникли проблемы с запуском:

I, [2023-08-24T16:50:36.568059 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate'
rake aborted!
Errno::ENOENT: No such file or directory @ rb_sysopen - tmp/js-processor.js
/var/www/discourse/lib/discourse_js_processor.rb:140:in `read'
/var/www/discourse/lib/discourse_js_processor.rb:140:in `create_new_context'
/var/www/discourse/lib/discourse_js_processor.rb:156:in `block in v8'
/var/www/discourse/lib/discourse_js_processor.rb:154:in `synchronize'
/var/www/discourse/lib/discourse_js_processor.rb:154:in `v8'
/var/www/discourse/lib/discourse_js_processor.rb:169:in `block in v8_call'
/var/www/discourse/lib/discourse_js_processor.rb:168:in `synchronize'
/var/www/discourse/lib/discourse_js_processor.rb:168:in `v8_call'
/var/www/discourse/lib/discourse_js_processor.rb:193:in `perform'

Связано ли это с DEV: Use esbuild to make DiscourseJsProcessor by cvx · Pull Request #23223 · discourse/discourse · GitHub?

1 лайк

Есть ли еще какие-либо данные трассировки стека? Или вы можете определить, какая миграция вызывает это?

2 лайка

На самом деле не волнуйтесь — @cvx и я нашли проблему, и исправление будет в ближайшее время.

1 лайк

Это просто сработало!

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

В любом случае, теперь вроде всё хорошо.

1 лайк

Отлично, рад слышать, что всё работает! У нас немного ситуация «курица и яйцо», которую нужно решить. После коммита, на который вы дали ссылку, assets:precompile нужно выполнить хотя бы один раз перед запуском db:migrate. Но верно и обратное — для assets:precompile нужна актуальная схема базы данных.

Из любопытства, как вы действовали в данном случае? Вы выполняли обновление на основе docker_manager через интерфейс? Или это было ./launcher rebuild app? (или что-то совершенно другое?)

1 лайк

Я поспешил с выводами.

Оно снова не сработало, но… э-э… ах. Но в прошлый раз база данных уже была мигрирована?

Когда всё работало, я запустил ./launcher bootstrap x из командной строки.

Затем я запустил это через Ansible, который выполняет:

      git pull && git checkout main && ./launcher bootstrap {{ discourse_yml }} {{ launcher_args | default("")}}

(Кажется, мне нужно убрать git checkout main — не уверен, зачем он там был)

Ага. Но Ansible сначала удаляет базу данных (это для сайта, который я использую для миграций, поэтому начало с нуля — частое явление). Так что это согласуется с вашими яйцами. Эх. Но потом я отключил drop_database, запустил это дважды через Ansible, и оно снова не сработало, затем я снова запустил bootstrap из командной строки, и всё равно не вышло. Никаких подсказок по миграциям:

Installing mysql2 0.5.5 with native extensions
Bundle complete! 137 Gemfile dependencies, 173 gems now installed.
Gems in the groups 'test' and 'development' were not installed.
Bundled gems are installed into `./vendor/bundle`

I, [2023-08-24T17:24:31.403199 #1]  INFO -- : Replacing types { with set_real_ip_from 192.168.1.0/24;
set_real_ip_from 172.19.0.0/24;
set_real_ip_from 172.18.0.0/24;
set_real_ip_from 172.17.0.0/24;
set_real_ip_from 38.242.7.193/28;
real_ip_recursive on;
real_ip_header X-Forwarded-For;
types {
 in /etc/nginx/conf.d/discourse.conf
I, [2023-08-24T17:24:31.403687 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'LOAD_PLUGINS=0 bundle exec rake plugin:pull_compatible_all'
I, [2023-08-24T17:24:33.084210 #1]  INFO -- : discourse-microsoft-auth is already at latest compatible version

I, [2023-08-24T17:24:33.084593 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate'
rake aborted!
Errno::ENOENT: No such file or directory @ rb_sysopen - tmp/js-processor.js
/var/www/discourse/lib/discourse_js_processor.rb:140:in `read'
/var/www/discourse/lib/discourse_js_processor.rb:140:in `create_new_context'
/var/www/discourse/lib/discourse_js_processor.rb:156:in `block in v8'
/var/www/discourse/lib/discourse_js_processor.rb:154:in `synchronize'
/var/www/discourse/lib/discourse_js_processor.rb:154:in `v8'
/var/www/discourse/lib/discourse_js_processor.rb:169:in `block in v8_call'
/var/www/discourse/lib/discourse_js_processor.rb:168:in `synchronize'
/var/www/discourse/lib/discourse_js_processor.rb:168:in `v8_call'
/var/www/discourse/lib/discourse_js_processor.rb:193:in `perform'
/var/www/discourse/lib/pretty_text.rb:54:in `apply_es6_file'

Но может быть, проблема в 'templates/enable-ruby-yjit.yml'? РЕДАКТИРОВАНО: Нет, это не оно. Затем я удалил шаблоны mysql и import. Всё равно ничего не вышло.

Эта проблема существует уже давно? Недавно я обновил другой сайт, работающий на ECS, и там тоже что-то странное происходило с миграцией, а затем сломались ассеты. Правда, база данных там огромная, поэтому я думал, что просто нетерпелив, к тому же часть процесса я делал вручную, так что, возможно, просто был невнимателен.

1 лайк

@cvx только что объединил это, что должно решить проблему взаимозависимости (как только пройдут тесты):

Это имеет смысл :+1:.

Мы считаем, что ошибка возникает, если какие-либо миграции базы данных включают вызов движка разметки (PrettyText). На подавляющем большинстве существующих сайтов это случается редко. Однако на новом сайте мы заполняем базу данных новыми темами, что требует обработки некоторого количества разметки.

Нет, только последние несколько часов (с момента DEV: Use esbuild to make DiscourseJsProcessor by cvx · Pull Request #23223 · discourse/discourse · GitHub)

1 лайк

Что ж, я вижу этот коммит при выполнении git pull в моей среде разработки, но он всё ещё не проходит, как при запуске через Ansible, так и локально (при этом я не удаляю базу данных).

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

Это локальный кластер в режиме «production» или среда разработки?

1 лайк

Это продакшн. Там используется Traefik в качестве обратного прокси, но в остальном это стандартная установка (а также база данных, созданная на основе стандартного образа postgres13, но с поддержкой pgvector).

Я упомянул свою среду разработки, потому что выполнил там git pull, пытаясь проверить, попал ли коммит в статус tests-passed; в git log я вижу FIX: Compile js-processor before db:migrate (#23229).

Я вернусь к тестированию того, что проверял ранее, и попробую снова через некоторое время.

Похоже, ваша среда разработки работает на ветке main, поэтому коммит отобразился. У нас возникла проблема с внутренней CI для проверки прохождения тестов, но, надеюсь, она будет решена в течение следующих 30 минут или около того :crossed_fingers:

1 лайк

Всё должно быть там сейчас. Пожалуйста, попробуйте ещё раз и сообщите нам, как у вас получилось, @pfaffman

1 лайк

Я выполнил один запуск bootstrap/deploy без сброса базы данных: всё сработало!

Я выполнил ещё один запуск bootstrap/deploy, с сбросом базы данных: тоже всё сработало!

1 лайк

Я один, у кого при обновлении появляется пустой экран?

Вам, скорее всего, потребуется выполнить пересборку через командную строку

Эта тема была автоматически закрыта через 10 часов. Новые ответы больше не принимаются.