Сбой обновления с v2.7.0.beta1 до v2.7.0.beta2

Пожалуйста, посмотрите этот gist gist:86508bebb133a06f79fadaeba345e3d6 · GitHub

Это стандартная автономная установка Discourse, пытающаяся обновиться с v2.7.0.beta1 до v2.7.0.beta2

Ошибка здесь:

uglifyjs '/var/www/discourse/public/assets/_vendor-b631d4ab0775fdbe453aa2158e18dc41826d0ba619e5f2731e5b9fa4c458af99.js' -m -c -o '/var/www/discourse/public/assets/vendor-b631d4ab0775fdbe453aa2158e18dc41826d0ba619e5f2731e5b9fa4c458af99.js' --source-map "base='/var/www/discourse/public/assets',root='/assets',url='/assets/vendor-b631d4ab0775fdbe453aa2158e18dc41826d0ba619e5f2731e5b9fa4c458af99.js.map'"
Parse error at _vendor-b631d4ab0775fdbe453aa2158e18dc41826d0ba619e5f2731e5b9fa4c458af99.js:1850,34
        return Handlebars.compile(...arguments);
                                  ^
ERROR: Unexpected token: punc «.»
    at JS_Parse_Error.get (eval at <anonymous> (/usr/lib/node_modules/uglify-js/tools/node.js:18:1), <anonymous>:71:23)
    at fatal (/usr/lib/node_modules/uglify-js/bin/uglifyjs:394:27)
    at run (/usr/lib/node_modules/uglify-js/bin/uglifyjs:343:9)
    at Object.<anonymous> (/usr/lib/node_modules/uglify-js/bin/uglifyjs:259:5)
    at Module._compile (internal/modules/cjs/loader.js:778:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:831:12)
rake aborted!
Errno::ENOENT: No such file or directory @ rb_file_s_size - /var/www/discourse/public/assets/vendor-b631d4ab0775fdbe453aa2158e18dc41826d0ba619e5f2731e5b9fa4c458af99.js
/var/www/discourse/lib/tasks/assets.rake:287:in `size'
/var/www/discourse/lib/tasks/assets.rake:287:in `block (4 levels) in <main>'
/var/www/discourse/lib/tasks/assets.rake:178:in `block in concurrent?'
/var/www/discourse/lib/tasks/assets.rake:278:in `block (3 levels) in <main>'
/var/www/discourse/lib/tasks/assets.rake:269:in `each'
/var/www/discourse/lib/tasks/assets.rake:269:in `block (2 levels) in <main>'
/var/www/discourse/lib/tasks/assets.rake:178:in `concurrent?'
/var/www/discourse/lib/tasks/assets.rake:266:in `block in <main>'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.3/exe/rake:27:in `<top (required)>'
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'
Tasks: TOP => assets:precompile
(See full trace by running task with --trace)
Docker Manager: FAILED TO UPGRADE

Есть какие-то идеи? В результате сайт недоступен. Спасибо.

Это немного тревожно. У вас закончилось место на диске или что-то в этом роде?

Привет, нет — на хосте свободно 70 ГБ. Используется только 1% индексов.

Я предположил, что ошибка «файл или каталог не найден» — это просто побочный эффект следующего:

Parse error at _vendor-b631d4ab0775fdbe453aa2158e18dc41826d0ba619e5f2731e5b9fa4c458af99.js:1850,34
        return Handlebars.compile(...arguments);
                                  ^
ERROR: Unexpected token: punc «.»

Этот файл точно существует:

root@redmine:/var/discourse# ./launcher enter app
ls -al ls -al root@xxxxx-app:/var/www/discourse# ls -al /var/www/discourse/public/assets/vendor-b631d4ab0775fdbe453aa2158e18dc41826d0ba619e5f2731e5b9fa4c458af99.js
-rw-r--r-- 1 discourse www-data 659907 Jan 22 04:55 /var/www/discourse/public/assets/vendor-b631d4ab0775fdbe453aa2158e18dc41826d0ba619e5f2731e5b9fa4c458af99.js

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

Есть ли какие-либо необычные плагины, сторонние плагины или обширные кастомизации?

Спасибо… абсолютно никаких плагинов или тяжелых кастомизаций… это была по сути чистая установка в конце 2020 года, лишь незначительные правки настроек через админ-интерфейс для таких вещей, как права модераторов и т.д. Очень странно.

К сожалению, я не сделал резервную копию перед запуском обновления, хотя у меня есть несколько автоматических бэкапов от пары дней назад. Думаю, это мой единственный выход из ситуации на данный момент… не будучи специалистом по Ruby, я не знаю, как разобраться с этой ошибкой.

Ага, похоже, что запуск ./launcher restart app хотя бы вернул его в онлайн, несмотря на обновления схемы базы данных. До этого выдавалась ошибка 500. Фух.

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

root@redmine-app:/var/www/discourse# ls -al plugins/
total 12
drwxr-xr-x 22 discourse discourse 4096 Nov  4 04:54 .
drwxr-xr-x 56 discourse discourse 4096 Jan 22 04:55 ..
drwxr-xr-x 13 discourse discourse   43 Nov  4 04:54 discourse-details
drwxr-xr-x 16 discourse discourse   54 Nov  4 04:54 discourse-local-dates
drwxr-xr-x 20 discourse discourse   69 Jan 22 04:55 discourse-narrative-bot
drwxr-xr-x 11 discourse discourse   59 Nov  4 04:54 discourse-presence
drwxr-xr-x 19 discourse root      4096 Jan 22 04:43 docker_manager
drwxr-xr-x  4 discourse discourse   51 Sep 28 05:11 lazy-yt
drwxr-xr-x 25 discourse discourse   99 Nov  4 04:54 poll
drwxr-xr-x  8 discourse www-data   129 Nov  4 04:54 styleguide

После перезапуска тема сайта немного сломалась, вероятно, потому, что ассеты не успели скомпилироваться. Интересно, есть ли способ завершить этот процесс вручную.

Это тот участок в файле vendor.js, на который жалуется система:

// allow us to import this as a module
if (typeof define !== "undefined") {
  define("handlebars", ["exports"], function (__exports__) {
    // It might not be defined server side, which is OK for pretty-text
    if (typeof Handlebars !== "undefined") {
      // eslint-disable-next-line
      __exports__.default = Handlebars;
      __exports__.compile = function () {
        // eslint-disable-next-line
        return Handlebars.compile(...arguments);
      };
    }
  });

  define("handlebars-compiler", ["exports"], function (__exports__) {
    // eslint-disable-next-line
    __exports__.default = Handlebars.compile;
  });
}
;

Строка 1850 (где возникает ошибка) — это вот этот фрагмент:

        return Handlebars.compile(...arguments);

Есть ли какой-нибудь временный хак, который можно применить здесь, чтобы обойти проблему? Или этот файл будет генерироваться заново при каждой попытке обновления? (P.S. Система считает, что обновление завершено после перезагрузки, но тема сломана… wondering if I can somehow get through this step or if I’ll have to restore from backup, basically..)

Может быть, я смогу как-то пройти этот этап, или мне придётся восстанавливаться из резервной копии? В общем…

Весь этот фрагмент кода взят из этого файла:

app/assets/javascripts/handlebars-shim.js

Полагаю, uglify-js воспринимает return Handlebars.compile(...arguments); как синтаксическую ошибку.

Что мне непонятно, так это то, как это может быть уникальным только для моей установки, ведь всё это находится внутри контейнера Docker..

Похоже, это пришло из этого коммита? DEV: Sync up more Ember CLI features (#11790) · discourse/discourse@83347ac · GitHub

ОК — я не знаю почему, но я запустил процесс ручного обновления (git pull; ./launcher rebuild app), и оно прошло успешно.

В рамках этого ручного обновления также были выполнены многие другие действия, такие как обновление PostgreSQL и т.д.

Мое предположение: что-то в вышеупомянутом коммите было несовместимо с uglify-js или версией Rails (или чем-то ещё) в исходном контейнере. По сути, это было обновление, требующее процесса «ручного» обновления.

Поскольку веб-административный интерфейс позволил мне обновить docker_manager, а затем и само приложение Discourse, я предположил, что это не потребуется (я знаю, что иногда система сообщает, что обновление через веб-админку невозможно и нужно делать его вручную… но в данном случае этого не произошло, хотя, вероятно, должно было…)

В любом случае, спасибо за вашу помощь.

Со мной произошло то же самое — веб-обновление не удалось из-за ошибки «Unexpected token: punc», а ручное обновление и пересборка сработали.

У меня тоже возникла проблема при запуске этого обновления (веб-обновление) :frowning:
После выполнения этих команд:
cd /var/discourse
git pull
./launcher rebuild app
Discourse работает, но войти в панель администратора (/admin) невозможно.

Обновление Ubuntu помогло восстановить работу.

В объявлении говорилось, что потребуется пересборка через командную строку. Не уверен, почему веб-интерфейс не знал, что нужно это требовать.

Как ни странно, я как раз пытался использовать эту функциональность в режиме разработки, но у меня она не работает… В объекте Handlebars есть только create(), а не compile(), хотя, возможно, я не туда смотрю… Я уже поднял этот вопрос здесь: Adding a bespoke raw template