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

해결 방법이 있을까요? 이로 인해 사이트가 오프라인 상태입니다. 감사합니다.

좀 당황스럽네요. 디스크 공간이 부족하거나 그런 문제가 있나요?

안녕하세요, 아닙니다 - 호스트에는 70GB의 여유 공간이 있습니다. inode 사용량은 1%에 불과합니다.

‘no such file or directory’ 오류는 다음 문제의 부수적인 결과라고 생각했습니다:

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년 말에 새로 설치한 것으로, 관리자 UI를 통해 moderator 권한 같은 설정을 약간 조정했을 뿐입니다. 정말 이상하네요.

아쉬운 점은 업그레이드를 실행하기 전에 백업을 하지 않았다는 것입니다. 며칠 전의 자동 백업이 몇 개 남아 있긴 합니다. 당장은 그게 유일한 해결책인 것 같습니다. 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

재시작 이후 사이트 테마가 약간 깨진 상태입니다. 에셋 컴파일이 완료되지 않았기 때문인 것 같습니다. 수동으로 마무리할 수 있는 방법이 있을까요?

벤더 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);

이 부분을 우회하기 위해 할 수 있는 임시 해킹 방법이 있을까요? 아니면 업그레이드를 시도할 때마다 이 파일이 재생성되는 건가요? (참고로 재시작 후 업그레이드가 완전히 완료된 것으로 인식하지만, 테마는 깨져 있습니다. 이 단계를 어떻게든 통과할 수 있는지, 아니면 백업에서 복원해야 하는지 궁금합니다.)

그 코드 섹션은 모두 이 파일에서 가져온 것입니다:

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)을 실행했는데 성공했습니다.

그 수동 업그레이드 과정에서 포스트그레SQL 업그레이드 등 다른 여러 활동도 함께 처리되었습니다.

제 추측으로는, 위에 언급된 커밋에 있는 어떤 부분이 원래 컨테이너에서 uglify-js나 rails 버전 등과 호환되지 않았던 것 같습니다. 기본적으로 수동 업그레이드 과정이 필요한 업그레이드였죠.

웹 관리 인터페이스에서 docker_manager를 업그레이드한 후 discourse 앱 자체를 업그레이드할 수 있었기 때문에, 이 과정이 필요 없을 것이라고 생각했습니다. (웹 관리를 통한 업그레이드가 불가능하다는 메시지가 표시되고 수동으로 해야 한다는 안내가 나오는 경우가 있다는 건 알고 있습니다. 하지만 이번에는 그런 안내가 나오지 않았고, 아마도 나와야 했을 텐데…)

어쨌든 도움 주셔서 감사합니다.

저도 같은 문제가 발생했습니다. 웹 업그레이드가 “Unexpected token: punc” 오류로 실패했고, 수동으로 pull/rebuild를 진행하니 해결되었습니다.

이 업데이트(웹 업그레이드)를 실행할 때도 문제가 발생했습니다 :frowning:
다음 명령을 실행한 후:
cd /var/discourse
git pull
./launcher rebuild app
discourse는 작동하지만, 관리자 패널(/admin)에 접근할 수 없습니다.

ubuntu 업데이트를 통해 정상 작동이 복구되었습니다.

공지사항에는 명령줄을 통해 다시 빌드해야 한다고 적혀 있었습니다. 웹 인터페이스가 이를 강제하지 못한 이유는 확실하지 않습니다.

유머러스하게도, 저는 방금 개발 환경에서 그 기능을 사용하려고 시도했는데 제 환경에서는 작동하지 않습니다… Handlebars 객체에는 compile()이 아니라 create()만 있습니다. 하지만 제가 잘못된 방향으로 접근하고 있을 수도 있겠네요… 여기에서 이슈를 등록했습니다: Adding a bespoke raw template