[多站点安装] pnpm 在重建过程中出现权限错误

您好,

我无法升级/重建我的 web_only 容器。调用 multisite migrate 时重建似乎失败了。全新安装(没有数据,只有我的 data.ymlweb_only.yml 文件)会产生相同的错误(数据容器的重建成功完成,没有错误)。

是我做错了什么,还是最近的升级引入了错误?

或者,我如何才能绕过这个错误?我不了解脚本的内部工作原理,但脚本首先显示 /root/ 不可写入,然后创建一个临时文件夹,接着似乎因为在 /root/ 目录中执行 mkdir 失败而崩溃。

非常感谢!

=> 正在播种主题和颜色方案
I, [2026-01-16T17:32:37.738763 #1]  INFO -- : => cd /var/www/discourse && sudo -E -u discourse bundle exec rake multisite:migrate
`/root` 不可写入。
Bundler 将暂时使用 `/tmp/bundler20260116-787-ovvxnu787` 作为您的主目录。
rake 中断!
Discourse::Utils::CommandError: pnpm -C=frontend/asset-processor node build.js (Discourse::Utils::CommandError)
 WARN  读取 "/root/.npmrc" 时出现问题。EACCES: 权限被拒绝,打开 "/root/.npmrc"
 WARN  读取 "/root/.config/pnpm/rc" 时出现问题。EACCES: 权限被拒绝,打开 "/root/.config/pnpm/rc"
 ERROR  EACCES: 权限被拒绝,创建目录 "/root/.local/share/pnpm/.tools/pnpm/10.28.0_tmp_901"
如需帮助,请运行:pnpm help run
/var/www/discourse/lib/discourse.rb:171:in `execute_command'
/var/www/discourse/lib/discourse.rb:137:in `exec'
/var/www/discourse/lib/discourse.rb:32:in `execute_command'
/var/www/discourse/lib/asset_processor.rb:27:in `build_asset_processor'
/var/www/discourse/lib/asset_processor.rb:31:in `build_production_asset_processor'
/var/www/discourse/lib/tasks/assets.rake:155:in `block in <main>'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rake-13.3.1/exe/rake:27:in `<top (required)>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Tasks: TOP => multisite:migrate => assets:precompile:asset_processor
(通过运行任务与 --trace 查看完整跟踪)


失败
--------------------
Pups::ExecError: cd /var/www/discourse && sudo -E -u discourse bundle exec rake multisite:migrate 失败,返回代码 #<Process::Status: pid 785 exit 1>
失败位置: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.4.0/lib/pups/exec_command.rb:138:in `spawn'
使用参数 "cd /var/www/discourse && sudo -E -u discourse bundle exec rake multisite:migrate" 执行失败
引导失败,退出代码 1
** 引导失败 ** 请向上滚动查找更早的错误消息,可能不止一个。

1 个赞

@david / @cvx 这和我们最近升级 pnpm 有关吗?:thinking:

1 个赞

这应该是 sudo -H -E -u discourse…

(我们可能应该将 set_home 设为默认值)

3 个赞

我真不敢相信我收到了完全正确的答案,只用了……25分钟 :tada:

非常非常感谢,重建成功了!

确实,我的 web_only.yml 包含了错误的命令。我记得我参考了以下教程之一:(这些教程仍然包含现在不正确的命令;不确定如何编辑这些帖子)。

3 个赞

是的,这可能会,因为我升级到 v10 失败时遇到了麻烦,当时我使用的是 9.something 版本。所以,我手动更新了 pnmp。

是的,我跑题了,因为我的不是多站点(multisite),而且 OP 的问题不同。

2 个赞