Ошибка при обновлении: 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.

Я пробовал скачать date-fns-2.29.3.tgz на хосте с Linux, и это сработало.

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

Discourse размещён на виртуальной машине с Alpine Linux.

Я столкнулся с той же проблемой на VPS под Ubuntu. Никаких подсказок.

Не могу сказать, является ли это реальной проблемой или у вас возникла проблема с сетью Docker.

Возможно, это можно исправить, увеличив время ожидания перед тем, как yarn откажется от попытки. Я отправил pull request:

Вы можете внести это изменение вручную, как объяснил Mario Lurig:

См. также:

Отлично. Цитирую для сохранения и поиска:

Однако, когда я ждал завершения шага 9 (после запуска ./discourse-setup) и сборки всего, процесс срывался с ошибкой ESOCKETTIMEDOUT, связанной с yarn. Последнее сообщение, которое пытается выполниться: [ ! -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, но завершится успешно.

У меня возникло то же время ожидания, но у меня возникли проблемы с реализацией предложенного решения, поэтому я хотел бы добавить некоторые детали.

Во-первых, у меня возникли трудности с поиском /var/discourse/templates, потому что моя установка Discourse находится в нестандартном месте. Я искал внутри 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 часов в моем случае), но, по крайней мере, выполняется до конца, и форум снова работает.

Наконец, я хотел бы добавить, что эта проблема (для меня) определенно не была вызвана нехваткой памяти: я использую VPS с установленными 32 ГБ, из которых 24 ГБ были свободны в момент возникновения проблемы.