업데이트 중 오류 발생: ESOCKETTIMEDOUT registry.yarnpkg.com

수동 절차로 Discourse를 업데이트하려고 시도 중입니다.

git pull
./launcher rebuild app
...

./discourse-doctor를 실행하면 오류가 표시됩니다.

I, [2023-06-16T11:39:43.530890 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'yarn install --frozen-lockfile && yarn cache clean'
error An unexpected error occurred: "https://registry.yarnpkg.com/date-fns/-/date-fns-2.29.3.tgz: ESOCKETTIMEDOUT".
FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'yarn install --frozen-lockfile && yarn cache clean' failed with return #<Process::Status: pid 281 exit 1>
Location of failure: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'
exec failed with the params {"cd"=>"$home", "cmd"=>["su discourse -c 'yarn install --frozen-lockfile && yarn cache clean'"]}
bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.
f485460571ab9e30e0d6917b05c9a8fe1772df13d8cae9fe67108961fae71039
==================== END REBUILD LOG ====================

./launcher rebuild app를 실행했을 때도 동일한 문제가 발생합니다.

Linux 호스트에서 date-fns-2.29.3.tgz 파일을 다운로드해 보았는데, 정상적으로 작동합니다.

wget https://registry.yarnpkg.com/date-fns/-/date-fns-2.29.3.tgz
Connecting to registry.yarnpkg.com (104.16.26.35:443)
saving to 'date-fns-2.29.3.tgz'
date-fns-2.29.3.tgz  100% |*************************************************************************************************************|  712k  0:00:00 ETA
'date-fns-2.29.3.tgz' saved

Alpine Linux VM에 Discourse가 호스팅되어 있습니다.

우분투 VPS에서도 동일한 문제가 발생합니다. 해결 방법이 전혀 떠오르지 않네요.

그것이 실제 문제인지, 아니면 Docker 네트워크 관련 문제가 있는지는 확신할 수 없습니다.

yarn이 실패하기 전에 더 많은 시간을 부여하면 이 문제가 수정될 수 있습니다. 다음에 pull request를 제출했습니다:

Mario Lurig의 설명에 따라 이 변경 사항을 수동으로 수행할 수 있습니다:

참고:

훌륭합니다. 영구 보관 및 검색을 위해 인용합니다:

그러나 ./discourse-setup 실행 후 모든 것이 빌드되는 동안 9단계 완료 대기 중 실패하며, yarn과 관련된 ESOCKETTIMEDOUT 오류가 발생합니다. 실행을 시도하는 마지막 메시지는 [ ! -d 'node_modules' ] || su discourse -c 'yarn install --production && yarn cache clean'입니다.

해결 방법

편집기를 설치해야 합니다. 저는 nano를 선호하므로 apt-get install nano로 해결됩니다. 그런 다음 /var/discourse/templates로 이동하여 nano web.template.yml을 실행하세요. 비교를 위해 github에서 클론한 파일과 관심 영역은 약 159번째 줄 근처입니다. 익숙해 보입니까? 바로 위에서 실패하기 전에 언급된 동일한 명령어입니다. 우리는 이 줄 위에 새로운 섹션을 추가하여 타임아웃을 늘려야 합니다.

  • exec: cd: $home cmd: - “su discourse -c ‘yarn config set network-timeout 600000 -g’”

이 변경 사항을 저장한 후 ./discourse-setup을 다시 실행하면 성공적으로 완료됩니다. 특히 brotli 압축 단계는 시간이 좀 걸리지만 반드시 완료됩니다.

저도 동일한 타임아웃 문제를 겪었지만, 제안된 해결책을 구현하는 데 어려움을 겪어 몇 가지 세부 사항을 추가하고 싶습니다.

첫째, 제 Discourse 설치 위치가 표준이 아니어서 /var/discourse/templates를 찾는 데 애를 먹었습니다. Docker 내부에서 찾아보았는데, 물론 이는 무의미한 일이었습니다.

둘째, 159번째 줄이라는 설명은 더 이상 정확하지 않습니다. template.yml의 다음 섹션을 가리키고 계신 것 같습니다:

- exec:
      cd: $home
      hook: yarn
      cmd:
        - |-
          if [ "$version" != "tests-passed" ]; then
            rm -rf app/assets/javascripts/node_modules
          fi
        - su discourse -c 'yarn install --frozen-lockfile && yarn cache clean'

셋째, 저는 yaml, pups, yarn 또는 이들이 Discourse에서 어떻게 사용되는지에 대해 잘 알지 못해 추측하고 싶지 않았습니다. 대신 원래 섹션에 다음과 같은 변경을 시도했습니다:

  - exec:
      cd: $home
      hook: yarn
      cmd:
        - |-
          if [ "$version" != "tests-passed" ]; then
            rm -rf app/assets/javascripts/node_modules
          fi
        - su discourse -c 'yarn config set network-timeout 600000 -g && yarn install --frozen-lockfile && yarn cache clean'

이 방법이 저에게는 잘 작동했습니다. ./launcher rebuild app 명령이 매우 오랜 시간(저는 2시간 이상) 걸리지만, 적어도 완료까지 실행되며 포럼이 다시 작동합니다.

마지막으로, 이 문제(제 경우)가 메모리 부족 때문이 아니었음을 분명히 하고 싶습니다. 32GB가 설치된 VPS를 사용 중이며, 문제가 발생했을 당시 24GB가 사용 가능 상태였습니다.