アップデート中にエラーが頻発します

ブラウザ経由で更新しようとしても、更新するたびに Sorry, there was an error updating Discourse. Please check the logs below. というエラーが表示されます。常にターミナルに頼らなければならず、フォーラムを30分ほどダウンさせる必要があるため、これは良くありません。

どなたか助けていただけると幸いです。

エラー:

概要
********************************************************
*** 少々お待ちください、次のステップには時間がかかる場合があります ***
********************************************************
ユニコーンをサイクリングしてメモリを解放します
ユニコーンのPIDを再起動します: 603
ユニコーンの再読み込みを待っています。
ユニコーンの再読み込みを待っています..
ユニコーンの再読み込みを待っています...
ユニコーンの再読み込みを待っています....
ユニコーンの再読み込みを待っています.....
ユニコーンの再読み込みを待っています......
ユニコーンの再読み込みを待っています.......
ユニコーンの再読み込みを待っています........
ユニコーンの再読み込みを待っています.........
ユニコーンの再読み込みを待っています..........
ユニコーンの再読み込みを待っています...........
ユニコーンの再読み込みを待っています............
ユニコーンの再読み込みを待っています.............
ユニコーンの再読み込みを待っています..............
ユニコーンの再読み込みを待っています...............
ユニコーンの再読み込みを待っています................
ユニコーンの再読み込みを待っています.................
ユニコーンの再読み込みを待っています..................
ユニコーンの再読み込みを待っています...........
ユニコーンの再読み込みを待っています............
ユニコーンの再読み込みを待っています.............
ユニコーンの再読み込みを待っています..............
ユニコーンの再読み込みを待っていますвка
$ cd /var/www/discourse 
$ git reset --hard HEAD@{upstream}
HEAD is now at fe1b1edba FIX: removes + from RTE toggle tooltip (#33542)
$ bundle install --retry 3 --jobs 4
Bundle complete! 143 Gemfile dependencies, 190 gems now installed.
Gems in the groups 'test' and 'development' were not installed.
Bundled gems are installed into `./vendor/bundle`
3 installed gems you directly depend on are looking for funding.
  Run `bundle fund` for details
$ if [ -f yarn.lock ]; then yarn install; else CI=1 pnpm install; fi
Scope: all 16 workspace projects
Lockfile is up to date, resolution step is skipped
Already up to date

Done in 9.1s using pnpm v9.15.6
$ LOAD_PLUGINS=0 bundle exec rake plugin:pull_compatible_all
discourse-adplugin is already at latest compatible version
discourse-categories-suppressed is already at latest compatible version
discourse-doc-categories is already at latest compatible version
Invalid version list in /var/www/discourse/plugins/discourse-landing-pages
discourse-landing-pages is already at latest compatible version
discourse-solved is already at latest compatible version
docker_manager is already at latest compatible version
$ SKIP_POST_DEPLOYMENT_MIGRATIONS=1 bundle exec rake multisite:migrate
Multisite migrator is running using 1 threads

Migrating default
Seeding default
*** Bundling assets. This will take a while *** 
$ bundle exec rake themes:update assets:precompile
Updating themes with concurrency: 10
[db:default] 'New Topic Header Button' -  checking...
[db:default] 'New Topic Header Button' -  up to date
[db:default] 'Category Banners' -  checking...
[db:default] 'Category Banners' -  up to date
[db:default] 'Clickable Topic' -  checking...
[db:default] 'Clickable Topic' -  up to date
[db:default] 'Tag Banners' -  checking...
[db:default] 'Tag Banners' -  up to date
[db:default] 'Breadcrumb Links' -  checking...
[db:default] 'Breadcrumb Links' -  up to date
[db:default] 'Welcome Link Banner' -  checking...
[db:default] 'Welcome Link Banner' -  up to date
[db:default] 'Tag Icons' -  checking...
[db:default] 'Tag Icons' -  up to date
[db:default] 'Social Share' -  checking...
[db:default] 'Social Share' -  up to date
[db:default] 'Navigation Menu Display Control' -  checking...
[db:default] 'Navigation Menu Display Control' -  up to date
[db:default] 'DiscoTOC' -  checking...
Node.js heap_size_limit is less than 2048MB. Setting --max-old-space-size=2048 and CHEAP_SOURCE_MAPS=1
Existing build is not reusable.
- Existing: {"ember_env"=\u003e"production", "core_tree_hash"=\u003e"c71c1ad482ff7f24c3ad3a76d5a521861f29e1fb"}
- Current: {"ember_env"=\u003e"production", "core_tree_hash"=\u003e"d026d5621e9421eaf67123aab7361a44f0fa9c31"}
Running full core build...
Building
Environment: production
The setting 'staticAddonTrees' will default to true in the next version of Embroider and can't be turned off. To prepare for this you should set 'staticAddonTrees: true' in your Embroider config.
The setting 'staticAddonTestSupportTrees' will default to true in the next version of Embroider and can't be turned off. To prepare for this you should set 'staticAddonTestSupportTrees: true' in your Embroider config.
building...
...[ConfigLoader]
...[Babel: @embroider/macros 
...[Babel: pretty-text 
...[Babel: @ember/legacy-built-in-components 
...[Babel: ember-source 
[BABEL] Note: The code generator has deoptimised the styling of /var/www/discourse/app/assets/javascripts/discourse/ember/ember-template-compiler.js as it exceeds the max of 500KB.
[BABEL] Note: The code generator has deoptimised the styling of /var/www/discourse/app/assets/javascripts/discourse/ember/ember.js as it exceeds the max of 500KB.
...[Babel: @glimmer/component 
...[Babel: @ember/render-modifiers 
...[Babel: dialog-holder 
...[Babel: ember-this-fallback 
...[Babel: ember-buffered-proxy 
...[Babel: ember-cache-primitive-polyfill 
...[Babel: float-kit 
...[Babel: select-kit 
...[@embroider/compat/app]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
undefined
 ERR_PNPM_RECURSIVE_EXEC_FIRST_FAIL  Command was killed with SIGKILL (Forced termination): ember build -prod
/var/www/discourse/script/assemble_ember_build.rb:103:in `system': Command failed with exit 1: pnpm (RuntimeError)
	from /var/www/discourse/script/assemble_ember_build.rb:103:in `
Docker Manager: FAILED TO UPGRADE
#
/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:211:in `run'
/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:112:in `upgrade'
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:19:in `block in 
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:6:in `fork'
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:6:in `
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.2.2.1/lib/rails/commands/runner/runner_command.rb:44:in `load'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.2.2.1/lib/rails/commands/runner/runner_command.rb:44:in `block in perform'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/execution_wrapper.rb:91:in `wrap'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.2.2.1/lib/rails/commands/runner/runner_command.rb:70:in `conditional_executor'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.2.2.1/lib/rails/commands/runner/runner_command.rb:43:in `perform'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.3.2/lib/thor/command.rb:28:in `run'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.3.2/lib/thor/invocation.rb:127:in `invoke_command'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.2.2.1/lib/rails/command/base.rb:178:in `invoke_command'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.3.2/lib/thor.rb:538:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.2.2.1/lib/rails/command/base.rb:73:in `perform'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.2.2.1/lib/rails/command.rb:71:in `block in invoke'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.2.2.1/lib/rails/command.rb:149:in `with_argv'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.2.2.1/lib/rails/command.rb:69:in `invoke'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.2.2.1/lib/rails/commands.rb:18:in `
/usr/local/lib/ruby/3.3.0/bundled_gems.rb:69:in `require'
/usr/local/lib/ruby/3.3.0/bundled_gems.rb:69:in `block (2 levels) in replace_require'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/bootsnap-1.18.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require'
bin/rails:18:in `
Spinning up 1 Unicorn worker(s) that were stopped initially

スワップファイルを大きくする必要があります。
私も同じ問題を抱えていました。これで解決しました。

「いいね!」 1

やり方を教えていただけますか?私はそれに慣れていません。誰かがそれについて話していたのを覚えています。しかし、私は何も変更したとは思っていません(どうやらそうしなかったようで、それが原因のようです)。ありがとうございます。

コマンドラインからアップグレードすることをお勧めします。

cd /var/discourse
./launcher rebuild app

それでもメモリの問題が発生する可能性があります。それが失敗した場合は、エラーと以下の出力を含めてください。

free -h
「いいね!」 2

GoogleまたはYouTubeを使用:
“Linux スワップファイル”

「いいね!」 1

DigitalOceanのガイドはこちらです。

通常、RAMと同じ量のスワップを追加する必要があります。

「いいね!」 1

https://meta.discourse.org/search?context=topic&context_id=373634&q=Node.js%20heap_size_limit%20is%20less%20than%202048MB&skip_context=true

「いいね!」 1

アップデート
Claudeとの数回のやり取りの後、状況は以下の通りです。

当初はこうでした。

sudo swapon --show
NAME      TYPE SIZE USED PRIO
/swapfile file   2G   1G   -2

それでもエラーが発生していました。

そこで、おそらく4GBに増やすことができました。

sudo swapon --show
NAME      TYPE SIZE   USED PRIO
/swapfile file   4G 714.4M   -2

さて、奇妙なのは、この作業中にアップデートページに戻ったところ、驚いたことにすべて更新されていたことです。
このエラーが表示されていたのに、どうして可能だったのでしょうか? :confused:

とにかく、これでswapfileがRAMではなくディスク容量に関連していることがわかりました。DigitalOceanのDroplet 1GB RAM、25GBディスクを使用しています。

したがって、4GBのswapfileは今のところ問題ないと思いますか?
しかし、なぜこのエラーが表示されていたのに更新されたのでしょうか?

スワップファイルは、ディスク容量の一部を非常に非常に遅いRAMとして使用する方法なので、ディスク容量とRAMの両方に関連しています。

25GBではほとんど十分な容量がありません。ほぼすべてのコマンドラインアップグレードの前に ./launcher cleanup を実行する必要があります。

「いいね!」 1

私が言いたかったのは、それについての議論を見たとき、人々が「2GBのスワップファイルを作成する」と言ったとき、それはRAMの量に関連していると思っていました。そのため、私の場合、RAMは1GBしかないので、それを行うことができませんでした。今、スワップファイルは実際にはディスクスペースであり、小さなパーティションを作成するようなものであることを理解しました。したがって、それらは必要に応じて「通信」するため関連していますが、私のコメントはより文字通りのものでした。

現時点ではそれが精一杯です。まだコミュニティがないので、これで十分です。コミュニティが成長するにつれてアップグレードします。

つまり、管理パネルを使用して更新する場合でも、更新ごとにターミナル経由で ./launcher cleanup を実行する必要があるということですか?

いいえ。管理パネルを使用しても、Docker は使用していないイメージをさらに作成することはありませんが、管理パネルからアップグレードを実行するための十分なメモリ(RAM およびスワップ)がない可能性があります。

これは私にとって少し混乱しています…
何人かの人が私と同じ問題を抱えていると言っていて、2GBのスワップファイルを作成したところ、それが役立ったそうです。
今、4GBのスワップファイルを作成しましたが、それはアップデートの後だったので、テストするには別のアップデートを待つ必要があります。

では、例えば、ディスク容量がまだ25GBだとしても、RAMを2GBにアップグレードすれば十分でしょうか?

私はこれらすべてに非常に慣れていないので、ほとんどの人には明白すぎる場合はお詫び申し上げます。作業しながら理解しようとしているだけです。

1GBのマシンに4GBのスワップがあれば十分でしょう。

個人的には、最初に2GBのスワップ付き2GBを推奨しますが、標準インストールの最小公開要件は満たしています。

そのまま使用して、遅すぎると感じた場合にのみアップグレードすることをお勧めします。

これでメモリに問題はないはずです。

「いいね!」 2

あなたの言うように、HDDもすぐにいっぱいになるので、RAMの量に関係なくcleanupは必須です。

ありがとうございます。ひとまずコンテンツを追加し、ユーザーを追加して、アップグレードが必要になるまで様子を見たいと思います。

話は変わりますが、ディスク容量に関連することです。すべてを確認していたところ、約18GBを使用していることに気づきました。ChatGPTに尋ねたところ、Discourseがそれほど多くのスペースを占めるのは普通だと言われました。

もしそうなら、私の25GBのサーバーは、インストールに18GB + スワップファイルに4GBを使用することになり、あまりスペースが残りません。これを確認していただけますか?

私はあなたのロボットと議論するつもりはありません。

4GBは利用可能なディスク容量から差し引かれることは(もちろん)正しいです。

「いいね!」 2

すべてのフォルダを確認したところ、このフォルダで12GBが使用されていることに気づきました。

/var/lib/docker/overlay2/

これは何ですか、そして不要なファイルを削除することで削減することは可能ですか?

以前のスレッドを参照してください
25Gドロップレットのディスク容量不足によりDiscourseのアップグレードに失敗する

こちらのスレッドも参照してください

「いいね!」 1

誰かが次のように言えるかもしれません:

追加のコンテキストなしでは、最初のコメントは私にとってあまり役に立ちませんでした。phpBBのような他のプラットフォームははるかに軽量であるのに、Discourseが18GBのディスクスペースを使用するとは予想していませんでした(専門家ではありませんが、プラットフォームがなぜ軽量なのかについてはまったくわかりませんが、明らかに異なります)。したがって、公式のインストールページにDiscourseがNギグのスペースを使用する可能性があると述べているものが何もないのに、25GBではほとんど十分なスペースがないと言ったとき、私はデフォルトのDigital Ocean 1GB RAMと25GBで十分であり、おそらくより大きなコミュニティは25GBだけで苦労するだろうと仮定しました。私のものは始まったばかりなので、ディスクスペースを問題とは見なしていませんでした。

これで意味が通じることを願っています。

「いいね!」 1