“rebuild app” 失败。看起来是 pnpm 的问题

系统:
  内核:6.19.5-1-aarch64-ARCH 架构:aarch64 位数:64
  控制台:pty pts/0 发行版:Arch Linux ARM
机器:
  类型:Kvm 系统:QEMU 产品:KVM Virtual Machine 版本:virt-4.2 序列号:<superuser required>
  Mobo: N/A model: N/A serial: N/A Firmware: UEFI vendor: EFI Development Kit II / OVMF v: 1.5.1
    date: 06/16/2021
CPU:
  Info: quad core model: N/A bits: 64 type: MCP
  Speed: N/A min/max: N/A cores: No per core speed data found.
Graphics:
  Device-1: Red Hat Virtio 1.0 GPU driver: virtio-pci v: 1
  Display: unspecified server: N/A driver: gpu: virtio-pci tty: 126x32 resolution: 1280x800
  API: N/A Message: No API data available in console. Headless machine?
  Info: Tools: x11: xprop
Audio:
  Message: No device data found.
  API: ALSA v: k6.19.5-1-aarch64-ARCH status: kernel-api
Network:
  Device-1: Red Hat Virtio 1.0 network driver: virtio-pci
  IF-ID-1: docker0 state: down mac: <filter>
  IF-ID-2: enp0s3 state: up speed: -1 duplex: unknown mac: <filter>
  IF-ID-3: tailscale0 state: unknown speed: -1 duplex: full mac: N/A
Drives:
  Local Storage: total: 200 GiB used: 179.79 GiB (89.9%)
  ID-1: /dev/sda model: BlockVolume size: 200 GiB
Partition:
  ID-1: / size: 195.31 GiB used: 179.45 GiB (91.9%) fs: ext4 dev: /dev/sda2
  ID-2: /boot size: 511 MiB used: 351.8 MiB (68.8%) fs: vfat dev: /dev/sda1
Swap:
  Alert: No swap data was found.
Sensors:
  Src: lm-sensors+/sys Message: No sensor data found using /sys/class/hwmon or lm-sensors.
Info:
  Memory: total: N/A available: 23.42 GiB used: 1.05 GiB (4.5%)
  Processes: 185 Uptime: 39m Init: systemd Shell: fish inxi: 3.3.40

sudo ./launcher rebuild app 失败。

您的 pnpm 版本与 "/var/www/discourse" 不兼容。

预期版本:^10
当前版本:9.15.9

这是因为包的清单中指定了 engines.pnpm 字段。
要解决此问题,请全局安装所需的 pnpm 版本。

要安装最新版本的 pnpm,请运行 "pnpm i -g pnpm"。
要检查您的 pnpm 版本,请运行 "pnpm -v"。

 type pnpm 
pnpm is /usr/bin/pnpm

 pnpm -v
10.30.3

完整日志信息,

 sudo ./launcher rebuild app

Device "docker0" does not exist.
arm64 arch detected.
WARNING: This output is designed for human readability. For machine-readable output, please use --format.
fatal: ref HEAD is not a symbolic ref
fatal: ref HEAD is not a symbolic ref
Stopping old container
+ /usr/bin/docker stop -t 600 app
app
2.0.20251003-1437: Pulling from discourse/base
Digest: sha256:0db7c9b4598e2a1806658391669d791fd779aa4301fdfbed6a7f322bf64e66ab
Status: Image is up to date for discourse/base:2.0.20251003-1437
docker.io/discourse/base:2.0.20251003-1437
/usr/local/lib/ruby/gems/3.3.0/gems/pups-1.3.0/lib/pups.rb
/usr/local/bin/pups --stdin
I, [2026-03-04T09:48:58.106542 #1]  INFO -- : Reading from stdin
I, [2026-03-04T09:48:58.119310 #1]  INFO -- : File > /etc/service/postgres/run  chmod: +x  chown: 
I, [2026-03-04T09:48:58.123037 #1]  INFO -- : File > /etc/service/postgres/log/run  chmod: +x  chown: 
I, [2026-03-04T09:48:58.129416 #1]  INFO -- : File > /etc/runit/3.d/99-postgres  chmod: +x  chown: 
I, [2026-03-04T09:48:58.135607 #1]  INFO -- : File > /root/install_postgres  chmod: +x  chown: 
I, [2026-03-04T09:48:58.139920 #1]  INFO -- : File > /root/upgrade_postgres  chmod: +x  chown: 
I, [2026-03-04T09:48:58.141508 #1]  INFO -- : Replacing data_directory = '/var/lib/postgresql/15/main' with data_directory = '/shared/postgres_data' in /etc/postgresql/15/main/postgresql.conf
I, [2026-03-04T09:48:58.150500 #1]  INFO -- : Replacing (?-mix:#?listen_addresses *=.*) with listen_addresses = '*' in /etc/postgresql/15/main/postgresql.conf
I, [2026-03-04T09:48:58.150842 #1]  INFO -- : Replacing (?-mix:#?synchronous_commit *=.*) with synchronous_commit = $db_synchronous_commit in /etc/postgresql/15/main/postgresql.conf
I, [2026-03-04T09:48:58.152288 #1]  INFO -- : Replacing (?-mix:#?shared_buffers *=.*) with shared_buffers = $db_shared_buffers in /etc/postgresql/15/main/postgresql.conf
I, [2026-03-04T09:48:58.158188 #1]  INFO -- : Replacing (?-mix:#?work_mem *=.*) with work_mem = $db_work_mem in /etc/postgresql/15/main/postgresql.conf
I, [2026-03-04T09:48:58.159740 #1]  INFO -- : Replacing (?-mix:#?default_text_search_config *=.*) with default_text_search_config = '$db_default_text_search_config' in /etc/postgresql/15/main/postgresql.conf
I, [2026-03-04T09:48:58.160835 #1]  INFO -- : Replacing (?-mix:#?checkpoint_segments *=.*) with checkpoint_segments = $db_checkpoint_segments in /etc/postgresql/15/main/postgresql.conf
I, [2026-03-04T09:48:58.162135 #1]  INFO -- : Replacing (?-mix:#?logging_collector *=.*) with logging_collector = $db_logging_collector in /etc/postgresql/15/main/postgresql.conf
I, [2026-03-04T09:48:58.163476 #1]  INFO -- : Replacing (?-mix:#?log_min_duration_statement *=.*) with log_min_duration_statement = $db_log_min_duration_statement in /etc/postgresql/15/main/postgresql.conf
I, [2026-03-04T09:48:58.165710 #1]  INFO -- : Replacing (?-mix:^#local +replication +postgres +peer$) with local replication postgres  peer in /etc/postgresql/15/main/pg_hba.conf
I, [2026-03-04T09:48:58.168274 #1]  INFO -- : Replacing (?-mix:^host.*all.*all.*127.*$) with host all all 0.0.0.0/0 md5 in /etc/postgresql/15/main/pg_hba.conf
I, [2026-03-04T09:48:58.168542 #1]  INFO -- : Replacing (?-mix:^host.*all.*all.*::1\/128.*$) with host all all ::/0 md5 in /etc/postgresql/15/main/pg_hba.conf
I, [2026-03-04T09:48:58.169770 #1]  INFO -- : > if [ -f /root/install_postgres ]; then
  /root/install_postgres && rm -f /root/install_postgres
elif [ -e /shared/postgres_run/.s.PGSQL.5432 ]; then
  socat /dev/null UNIX-CONNECT:/shared/postgres_run/.s.PGSQL.5432 || exit 0 && echo postgres already running stop container ; exit 1
fi

I, [2026-03-04T09:49:03.242919 #1]  INFO -- : Generating locales (this might take a while)...
  en_US.UTF-8... done
Generation complete.

I, [2026-03-04T09:49:03.243173 #1]  INFO -- : > HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/15/bin/postmaster -D /etc/postgresql/15/main
I, [2026-03-04T09:49:03.254041 #1]  INFO -- : File > /usr/local/bin/create_db  chmod: +x  chown: 
I, [2026-03-04T09:49:03.261713 #1]  INFO -- : File > /var/lib/postgresql/take-database-backup  chmod: +x  chown: postgres:postgres
I, [2026-03-04T09:49:03.271614 #1]  INFO -- : File > /var/spool/cron/crontabs/postgres  chmod:   chown: 
I, [2026-03-04T09:49:03.271825 #1]  INFO -- : > sleep 5
2026-03-04 09:49:03.318 UTC [45] LOG:  starting PostgreSQL 15.14 (Debian 15.14-1.pgdg12+1) on aarch64-unknown-linux-gnu, compiled by gcc (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bit
2026-03-04 09:49:03.318 UTC [45] LOG:  listening on IPv4 address "0.0.0.0", port 5432
2026-03-04 09:49:03.318 UTC [45] LOG:  listening on IPv6 address "::", port 5432
2026-03-04 09:49:03.324 UTC [45] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2026-03-04 09:49:03.332 UTC [56] LOG:  database system was shut down at 2026-03-04 09:48:51 UTC
2026-03-04 09:49:03.339 UTC [45] LOG:  database system is ready to accept connections
I, [2026-03-04T09:49:08.273584 #1]  INFO -- : 
I, [2026-03-04T09:49:08.273790 #1]  INFO -- : > /usr/local/bin/create_db
2026-03-04 09:49:08.394 UTC [63] postgres@postgres ERROR:  database "discourse" already exists
2026-03-04 09:49:08.394 UTC [63] postgres@postgres STATEMENT:  CREATE DATABASE discourse;
createdb: error: database creation failed: ERROR:  database "discourse" already exists
2026-03-04 09:49:08.465 UTC [66] postgres@discourse ERROR:  role "discourse" already exists
2026-03-04 09:49:08.465 UTC [66] postgres@discourse STATEMENT:  create user discourse;
ERROR:  role "discourse" already exists
NOTICE:  extension "hstore" already exists, skipping
NOTICE:  extension "pg_trgm" already exists, skipping
NOTICE:  extension "vector" already exists, skipping
NOTICE:  version "0.8.1" of extension "vector" is already installed
NOTICE:  extension "hstore" already exists, skipping
NOTICE:  extension "pg_trgm" already exists, skipping
NOTICE:  extension "vector" already exists, skipping
NOTICE:  version "0.8.1" of extension "vector" is already installed
I, [2026-03-04T09:49:08.964159 #1]  INFO -- : GRANT
ALTER SCHEMA
CREATE EXTENSION
CREATE EXTENSION
CREATE EXTENSION
ALTER EXTENSION
CREATE EXTENSION
CREATE EXTENSION
CREATE EXTENSION
ALTER EXTENSION
UPDATE 0

I, [2026-03-04T09:49:08.964284 #1]  INFO -- : > echo postgres installed!
I, [2026-03-04T09:49:08.966221 #1]  INFO -- : postgres installed!

I, [2026-03-04T09:49:08.975642 #1]  INFO -- : File > /etc/service/redis/run  chmod: +x  chown: 
I, [2026-03-04T09:49:08.979973 #1]  INFO -- : File > /etc/service/redis/log/run  chmod: +x  chown: 
I, [2026-03-04T09:49:08.984232 #1]  INFO -- : File > /etc/runit/3.d/10-redis  chmod: +x  chown: 
I, [2026-03-04T09:49:08.986194 #1]  INFO -- : Replacing daemonize yes with  in /etc/redis/redis.conf
I, [2026-03-04T09:49:08.992016 #1]  INFO -- : Replacing (?-mix:^pidfile.*$) with  in /etc/redis/redis.conf
I, [2026-03-04T09:49:08.992581 #1]  INFO -- : > install -d -m 0755 -o redis -g redis /shared/redis_data
I, [2026-03-04T09:49:08.995065 #1]  INFO -- : 
I, [2026-03-04T09:49:08.995672 #1]  INFO -- : Replacing (?-mix:^logfile.*$) with logfile "" in /etc/redis/redis.conf
I, [2026-03-04T09:49:08.996171 #1]  INFO -- : Replacing (?-mix:^bind .*$) with  in /etc/redis/redis.conf
I, [2026-03-04T09:49:08.998122 #1]  INFO -- : Replacing (?-mix:^dir .*$) with dir /shared/redis_data in /etc/redis/redis.conf
I, [2026-03-04T09:49:09.000399 #1]  INFO -- : Replacing (?-mix:^protected-mode yes) with protected-mode no in /etc/redis/redis.conf
I, [2026-03-04T09:49:09.002541 #1]  INFO -- : Replacing # io-threads 4 with io-threads $redis_io_threads in /etc/redis/redis.conf
I, [2026-03-04T09:49:09.004770 #1]  INFO -- : > echo redis installed
I, [2026-03-04T09:49:09.006694 #1]  INFO -- : redis installed

I, [2026-03-04T09:49:09.006880 #1]  INFO -- : > cat /etc/redis/redis.conf | grep logfile
I, [2026-03-04T09:49:09.010247 #1]  INFO -- : logfile ""

I, [2026-03-04T09:49:09.010419 #1]  INFO -- : > exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf
I, [2026-03-04T09:49:09.012272 #1]  INFO -- : > sleep 10
112:C 04 Mar 2026 09:49:09.018 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
112:C 04 Mar 2026 09:49:09.018 # Redis version=7.0.15, bits=64, commit=00000000, modified=0, pid=112, just started
112:C 04 Mar 2026 09:49:09.018 # Configuration loaded
112:M 04 Mar 2026 09:49:09.019 * Increased maximum number of open files to 10032 (it was originally set to 1024).
112:M 04 Mar 2026 09:49:09.019 * monotonic clock: POSIX clock_gettime
112:M 04 Mar 2026 09:49:09.019 * Running mode=standalone, port=6379.
112:M 04 Mar 2026 09:49:09.019 # Server initialized
112:M 04 Mar 2026 09:49:09.019 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
112:M 04 Mar 2026 09:49:09.021 * Loading RDB produced by version 7.0.15
112:M 04 Mar 2026 09:49:09.021 * RDB age 19 seconds
112:M 04 Mar 2026 09:49:09.021 * RDB memory usage when created 1.88 Mb
112:M 04 Mar 2026 09:49:09.024 * Done loading RDB, keys loaded: 303, keys expired: 0.
112:M 04 Mar 2026 09:49:09.024 * DB loaded from disk: 0.003 seconds
112:M 04 Mar 2026 09:49:09.024 * Ready to accept connections
I, [2026-03-04T09:49:19.014547 #1]  INFO -- : 
I, [2026-03-04T09:49:19.014797 #1]  INFO -- : > thpoff echo "thpoff is installed!"
I, [2026-03-04T09:49:19.018997 #1]  INFO -- : thpoff is installed!

I, [2026-03-04T09:49:19.019260 #1]  INFO -- : > /usr/local/bin/ruby -e 'if ENV["DISCOURSE_SMTP_ADDRESS"] == "smtp.example.com"; puts "中止!未配置邮件!"; exit 1; end'
I, [2026-03-04T09:49:19.090091 #1]  INFO -- : 
I, [2026-03-04T09:49:19.090206 #1]  INFO -- : > /usr/local/bin/ruby -e 'if ENV["DISCOURSE_HOSTNAME"] == "discourse.example.com"; puts "中止!未配置域名!"; exit 1; end'
I, [2026-03-04T09:49:19.158131 #1]  INFO -- : 
I, [2026-03-04T09:49:19.158246 #1]  INFO -- : > /usr/local/bin/ruby -e 'if (ENV["DISCOURSE_CDN_URL"] || "")[0..1] == "//"; puts "中止!CDN 必须指定协议"

您是否尝试通过 git pull 更新您的启动器?您似乎正在使用过时的基础镜像。

谢谢,它奏效了。:grinning_face_with_smiling_eyes: