Это стандартная автономная установка 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
Есть какие-то идеи? В результате сайт недоступен. Спасибо.
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..)
Может быть, я смогу как-то пройти этот этап, или мне придётся восстанавливаться из резервной копии? В общем…
ОК — я не знаю почему, но я запустил процесс ручного обновления (git pull; ./launcher rebuild app), и оно прошло успешно.
В рамках этого ручного обновления также были выполнены многие другие действия, такие как обновление PostgreSQL и т.д.
Мое предположение: что-то в вышеупомянутом коммите было несовместимо с uglify-js или версией Rails (или чем-то ещё) в исходном контейнере. По сути, это было обновление, требующее процесса «ручного» обновления.
Поскольку веб-административный интерфейс позволил мне обновить docker_manager, а затем и само приложение Discourse, я предположил, что это не потребуется (я знаю, что иногда система сообщает, что обновление через веб-админку невозможно и нужно делать его вручную… но в данном случае этого не произошло, хотя, вероятно, должно было…)
У меня тоже возникла проблема при запуске этого обновления (веб-обновление)
После выполнения этих команд:
cd /var/discourse
git pull
./launcher rebuild app
Discourse работает, но войти в панель администратора (/admin) невозможно.
Как ни странно, я как раз пытался использовать эту функциональность в режиме разработки, но у меня она не работает… В объекте Handlebars есть только create(), а не compile(), хотя, возможно, я не туда смотрю… Я уже поднял этот вопрос здесь: Adding a bespoke raw template