更新时一直报错

无论我尝试更新多少次,通过浏览器更新时,我总是收到 抱歉,更新 Discourse 时出错。请检查下面的日志。。我总是不得不依赖终端,这不好,因为那样我将不得不让我的论坛关闭大约 30 分钟。

如果有人能在这里帮助我,将不胜感激。

错误:

Summary
********************************************************
*** 请耐心等待,下一步可能需要一些时间 ***
********************************************************
循环 Unicorn,以释放内存
正在重启 unicorn pid:603
正在等待 Unicorn 重新加载。
正在等待 Unicorn 重新加载..
正在等待 Unicorn 重新加载...
正在等待 Unicorn 重新加载....
正在等待 Unicorn 重新加载.....
正在等待 Unicorn 重新加载......
正在等待 Unicorn 重新加载.......
正在等待 Unicorn 重新加载........
正在等待 Unicorn 重新加载.........
正在等待 Unicorn 重新加载..........
正在等待 Unicorn 重新加载...........
正在等待 Unicorn 重新加载............
正在等待 Unicorn 重新加载.............
正在等待 Unicorn 重新加载..............
正在等待 Unicorn 重新加载...............
正在等待 Unicorn 重新加载................
正在等待 Unicorn 重新加载.................
正在等待 Unicorn 重新加载..................
正在等待 Unicorn 重新加载...........
正在等待 Unicorn 重新加载............
正在等待 Unicorn 重新加载.............
正在等待 Unicorn 重新加载..............
正在等待 Unicorn 重新加载...............
$ cd /var/www/discourse && git reset --hard HEAD@{upstream}
HEAD 现在是 fe1b1edba FIX:从 RTE 切换工具提示中删除 + (#33542)
$ bundle install --retry 3 --jobs 4
Bundle 完成!已安装 143 个 Gemfile 依赖项,190 个 gem。
未安装 'test' 和 'development' 组中的 Gems。
Bundled gems 已安装到 `./vendor/bundle`
您直接依赖的 3 个已安装 gem 正在寻找资金。
  运行 `bundle fund` 获取详情
$ if [ -f yarn.lock ]; then yarn install; else CI=1 pnpm install; fi
范围:所有 16 个工作区项目
Lockfile 是最新的,跳过解析步骤
已是最新

使用 pnpm v9.15.6 完成,耗时 9.1 秒
$ LOAD_PLUGINS=0 bundle exec rake plugin:pull_compatible_all
discourse-adplugin 已是最新兼容版本
discourse-categories-suppressed 已是最新兼容版本
discourse-doc-categories 已是最新兼容版本
/var/www/discourse/plugins/discourse-landing-pages 中的版本列表无效
discourse-landing-pages 已是最新兼容版本
discourse-solved 已是最新兼容版本
docker_manager 已是最新兼容版本
$ SKIP_POST_DEPLOYMENT_MIGRATIONS=1 bundle exec rake multisite:migrate
多站点迁移器正在使用 1 个线程运行

正在迁移默认
正在播种默认
*** 正在打包资源。这需要一些时间 *** 
$ bundle exec rake themes:update assets:precompile
使用并发 10 更新主题
[db:default] 'New Topic Header Button' -  正在检查...
[db:default] 'New Topic Header Button' -  已是最新
[db:default] 'Category Banners' -  正在检查...
[db:default] 'Category Banners' -  已是最新
[db:default] 'Clickable Topic' -  正在检查...
[db:default] 'Clickable Topic' -  已是最新
[db:default] 'Tag Banners' -  正在检查...
[db:default] 'Tag Banners' -  已是最新
[db:default] 'Breadcrumb Links' -  正在检查...
[db:default] 'Breadcrumb Links' -  已是最新
[db:default] 'Welcome Link Banner' -  正在检查...
[db:default] 'Welcome Link Banner' -  已是最新
[db:default] 'Tag Icons' -  正在检查...
[db:default] 'Tag Icons' -  已是最新
[db:default] 'Social Share' -  正在检查...
[db:default] 'Social Share' -  已是最新
[db:default] 'Navigation Menu Display Control' -  正在检查...
[db:default] 'Navigation Menu Display Control' -  已是最新
[db:default] 'DiscoTOC' -  正在检查...
Node.js heap_size_limit 小于 2048MB。正在设置 --max-old-space-size=2048 和 CHEAP_SOURCE_MAPS=1
现有构建不可重用。
- 当前:{"ember_env"=\u003e"production", "core_tree_hash"=\u003e"d026d5621e9421eaf67123aab7361a44f0fa9c31"}
正在运行完整的核心构建...
正在构建
环境:production
在 Embroider 的下一个版本中,设置 'staticAddonTrees' 将默认为 true 且无法关闭。为准备此,您应该在 Embroider 配置中设置 'staticAddonTrees: true'。
在 Embroider 的下一个版本中,设置 'staticAddonTestSupportTrees' 将默认为 true 且无法关闭。为准备此,您应该在 Embroider 配置中设置 'staticAddonTestSupportTrees: true'。
正在构建...
...[ConfigLoader]
...[Babel: @embroider/macros > applyPatches]
...[Babel: pretty-text > applyPatches]
...[Babel: @ember/legacy-built-in-components > applyPatches]
...[Babel: ember-source > applyPatches]
[BABEL] 注意:代码生成器已对 /var/www/discourse/app/assets/javascripts/discourse/ember/ember-template-compiler.js 的样式进行了优化,因为它超过了 500KB 的最大值。
[BABEL] 注意:代码生成器已对 /var/www/discourse/app/assets/javascripts/discourse/ember/ember.js 的样式进行了优化,因为它超过了 500KB 的最大值。
...[Babel: @glimmer/component > applyPatches]
...[Babel: @ember/render-modifiers > applyPatches]
...[Babel: dialog-holder > applyPatches]
...[Babel: ember-this-fallback > applyPatches]
...[Babel: ember-buffered-proxy > applyPatches]
...[Babel: ember-cache-primitive-polyfill > applyPatches]
...[Babel: float-kit > applyPatches]
...[Babel: select-kit > applyPatches]
...[@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 命令被 SIGKILL (强制终止)杀死:ember build -prod
/var/www/discourse/script/assemble_ember_build.rb:103:in `system': 命令失败,退出代码 1:pnpm (RuntimeError)
	来自 /var/www/discourse/script/assemble_ember_build.rb:103:in `<main>'
Docker Manager:升级失败
#&lt;RuntimeError: RuntimeError&gt;
/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 <main>'
/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 `<main>'
/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 `<main>'
/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 `<main>'
正在启动最初停止的 1 个 Unicorn 工作进程

你需要增大交换文件。
我遇到过同样的问题。这样就解决了。

1 个赞

你能解释一下怎么做吗?我对那个不太熟悉。我记得有人谈论过它,但我不认为我做过任何更改(嗯,显然我可能没做,而这正是导致这种情况的原因)。谢谢

我建议从命令行升级

cd /var/discourse
./launcher rebuild app

您可能仍然有内存问题。如果失败,请包含错误信息以及以下命令的输出:

free -h
2 个赞

使用 Google 或 YouTube:
“Linux 交换文件”

1 个赞

这是 Digital Ocean 的指南:

您通常需要添加与您的 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 的 1GB RAM、25GB 磁盘的 droplet。

所以我想现在有 4GB 的 swapfile 还可以吧?
但是,为什么它会更新,即使在显示错误之后?

交换文件是一种将部分磁盘空间用作非常非常慢的内存的方法,因此它与磁盘空间和内存都有关。

25GB 空间勉强够用。在执行几乎所有的命令行升级之前,您都需要运行 ./launcher cleanup

1 个赞

我的意思是,当我看到有关它的讨论时,当人们说“创建一个2GB的交换文件”时,我认为它与内存量有关,所以在我这里,我无法做到,因为我只有1GB内存。现在,我明白了交换文件实际上是磁盘空间,几乎就像创建一个小分区。所以,是的,它们有关联,因为它们在必要时会相互“通信”,但我对我的评论更字面化了。

这是我目前能负担得起的,而且由于我还没有真正的社区,所以足够了。随着社区的增长,我会升级。

那么,您的意思是,在每次更新之前,即使使用管理面板进行更新,我也应该通过终端运行 ./launcher cleanup

不。使用管理面板进行更新并不会让 Docker 创建更多它不使用的镜像,但您可能没有足够的内存(RAM 加上交换空间)来通过管理面板进行升级。

这一切对我来说有点令人困惑…
有些人说他们遇到了和我一样的问题,创建2GB的交换文件帮助了他们。我现在创建了4GB的交换文件,但这在我更新之后,所以我将不得不等待另一次更新来测试它。

那么,举个例子,如果我将内存升级到2GB,那是否足够了,即使磁盘空间仍然是25GB?

我对这一切都很陌生,所以如果这对大多数人来说太明显了,我很抱歉。我只是在工作中摸索。

1GB的机器配4GB的交换空间应该足够了。

我个人建议至少从2GB内存配2GB交换空间开始,但您满足标准安装的最低发布要求。

您可以继续使用,只有在发现速度太慢时才升级。

您现在应该不会遇到内存问题了。

2 个赞

除了你说的,HDD 也会很快被填满,无论有多少 RAM,cleanup 都是必须做的。

谢谢。目前我只想开始添加内容并添加一些用户,直到有意义地进行升级。

离题了,但仍然与磁盘空间有关:当我检查所有内容时,我注意到我使用了大约 18GB 的空间,当我问 ChatGPT 时,它说 Discourse 占用这么多空间是正常的吗?

如果是这样,那么我的 25GB 服务器将用于安装占用 18GB + swapfile 占用 4GB,这样我就没有多少空间了。你能确认一下吗?

我不会和你的机器人辩论。

你说得对,4GB 会占用你的可用磁盘空间(当然)。

2 个赞

我刚检查了所有文件夹,发现此文件夹占用了 12GB:

/var/lib/docker/overlay2/

这是什么,是否可以通过删除不必要的文件来减小它?

也许可以看看之前的帖子
Discourse 升级因 25G 实例磁盘空间不足而失败

也许也可以看看这个帖子

1 个赞

也许有人会说:

在没有任何额外上下文的情况下,你最初的评论对我来说帮助不大。我没想到 Discourse 会占用 18GB 的磁盘空间,而像 phpBB 这样的其他平台要轻量得多(我不是专家,所以我不知道为什么一个平台会比另一个平台轻量,但它们确实不同)。所以,当你轻描淡写地说 25GB 勉强够用,却没有提供更多上下文时,我以为 Digital Ocean 默认的 1GB RAM 和 25GB 空间绰绰有余,也许只有大型社区才会觉得 25GB 不够用。因为我的社区才刚起步,所以我没有把磁盘空间看作是一个问题。

希望这能说得通。

1 个赞