Ricostruzione fallita - forse legata a rolldown?

Ciao a tutti, ho appena provato a fare un rebuild usando discourse/base:2.0.20260617-0053. Tuttavia, sto riscontrando alcuni errori relativi a pacchetti mancanti

Got some warnings
╭ Warning ─────────────────────────────────────────────────────────────────────╮
│                                                                              │
│   Ignored build scripts: core-js@2.6.12, core-js@3.49.0, lefthook@2.1.9,     │
│   rete@2.0.6.                                                                │
│   Run "pnpm approve-builds" to pick which dependencies should be allowed     │
│   to run scripts.                                                            │
│                                                                              │
╰──────────────────────────────────────────────────────────────────────────────╯
Done in 10.4s using pnpm v10.28.0
Lockfile is up to date, resolution step is skipped
Already up to date

╭ Warning ─────────────────────────────────────────────────────────────────────╮
│                                                                              │
│   Ignored build scripts: core-js@2.6.12, core-js@3.49.0, lefthook@2.1.9,     │
│   rete@2.0.6.                                                                │
│   Run "pnpm approve-builds" to pick which dependencies should be allowed     │
│   to run scripts.                                                            │
│                                                                              │
╰──────────────────────────────────────────────────────────────────────────────╯
.....
Successfully installed aws-sdk-translate-1.35.0
1 gem installed
rake aborted!
Discourse::Utils::CommandError: pnpm -C=frontend/asset-processor node build.mjs (Discourse::Utils::CommandError)
file:///var/www/discourse/node_modules/.pnpm/rolldown@1.1.2/node_modules/rolldown/dist/shared/error-T-E9reEy.mjs:48
        const wrapper = new Error(summary);
                        ^

Error: Build failed with 9 errors:

[RESOLVE_ERROR] Could not resolve './shims' in transpiler.js
   ╭─[ transpiler.js:1:8 ]
   │
 1 │ import "./shims";
   │        ────┬────
   │            ╰────── Tsconfig not found
───╯

[RESOLVE_ERROR] Could not resolve './postcss' in transpiler.js
   ╭─[ transpiler.js:2:8 ]
   │
 2 │ import "./postcss";
   │        ─────┬─────
   │             ╰─────── Tsconfig not found
───╯

[RESOLVE_ERROR] Could not resolve './asset-processor-rollup' in transpiler.js
   ╭─[ transpiler.js:3:8 ]
   │
 3 │ import "./asset-processor-rollup";
   │        ─────────────┬────────────
   │                     ╰────────────── Tsconfig not found
───╯

[RESOLVE_ERROR] Could not resolve '@babel/standalone' in transpiler.js
   ╭─[ transpiler.js:4:45 ]
   │
 4 │ import { transform as babelTransform } from "@babel/standalone";
   │                                             ─────────┬─────────
   │                                                      ╰─────────── Tsconfig not found
───╯

[RESOLVE_ERROR] Could not resolve 'decorator-transforms' in transpiler.js
   ╭─[ transpiler.js:5:33 ]
   │
 5 │ import DecoratorTransforms from "decorator-transforms";
   │                                 ───────────┬──────────
   │                                            ╰──────────── Tsconfig not found
───╯
/var/www/discourse/lib/discourse.rb:180:in 'Discourse::Utils::CommandRunner#execute_command'
/var/www/discourse/lib/discourse.rb:146:in 'Discourse::Utils::CommandRunner#exec'
/var/www/discourse/lib/discourse.rb:33:in 'Discourse::Utils.execute_command'
/var/www/discourse/lib/asset_processor.rb:58:in 'AssetProcessor.build_asset_processor'
/var/www/discourse/lib/asset_processor.rb:107:in 'block in AssetProcessor.load_or_build_processor_source'
/var/www/discourse/lib/asset_processor.rb:86:in 'block in AssetProcessor.with_file_lock'
/var/www/discourse/lib/asset_processor.rb:84:in 'IO.open'
/var/www/discourse/lib/asset_processor.rb:84:in 'AssetProcessor.with_file_lock'
/var/www/discourse/lib/asset_processor.rb:103:in 'AssetProcessor.load_or_build_processor_source'
/var/www/discourse/lib/tasks/assets.rake:161:in 'block in <main>'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/exe/rake:27:in '<top (required)>'
/usr/local/bin/bundle:25:in 'Kernel#load'
/usr/local/bin/bundle:25:in '<main>'
Tasks: TOP => db:migrate => assets:precompile:asset_processor
(See full trace by running task with --trace)
19:signal-handler (1782860705) Received SIGTERM scheduling shutdown...
I, [2026-06-30T23:05:05.686770 #1]  INFO -- : Terminating async processes
I, [2026-06-30T23:05:05.686855 #1]  INFO -- : Sending TERM to exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 19
19:M 30 Jun 2026 23:05:05.697 * User requested shutdown...
19:M 30 Jun 2026 23:05:05.697 * Saving the final RDB snapshot before exiting.
19:M 30 Jun 2026 23:05:05.743 * DB saved on disk
19:M 30 Jun 2026 23:05:05.743 # Redis is now ready to exit, bye bye...


FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' failed with return #<Process::Status: pid 3131 exit 1>
Location of failure: /usr/local/lib/ruby/gems/3.4.0/gems/pups-1.4.0/lib/pups/exec_command.rb:138:in 'Pups::ExecCommand#spawn'
exec failed with the params {"cd" => "$home", "tag" => "migrate", "hook" => "db_migrate", "cmd" => ["su discourse -c 'bundle exec rake db:migrate'"]}
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.

Ho provato a cancellare le cartelle dei moduli node e a fare un pnpm install manuale, ma senza successo. Ho anche provato pnpm approve-builds nel container, ma mi ha detto che non ci sono pacchetti da approvare?

Qualcun altro ha riscontrato questo problema? Ho completato un rebuild usando questa immagine per un altro forum ed è andato a buon fine. Ho tentato il rebuild usando ./launcher rebuild app

Ci sono novità al riguardo o passi da seguire per permettere alla ricostruzione di procedere? Grazie!

Hai qualche plugin installato?

No, solo quelli del solito discorso ufficiale

Ciao @tanya_byrne, stai eseguendo la versione “latest” di Discourse, con un’installazione standard?

Sai se ci sono differenze significative tra le due macchine/forum?

Sembra che questo errore possa essere causato dall’esecuzione di rm -rf su un plugin core. Questa è un’operazione molto rischiosa: tutti i test di Discourse vengono eseguiti con tutti i plugin core presenti. Quindi ti consiglio di rimuovere quella riga dal tuo file app.yml.

Detto questo, possiamo migliorare la compilazione di asset-processor in modo che non si interrompa in modo così catastrofico:

David, allora come facciamo a sovrascrivere i template nei plugin core senza prima eliminare un plugin core e poi sostituirlo con una versione forkata? Non è sicuro? Possono rimanere asset che riflettono l’originale?

Ho seguito con successo questo approccio in passato quando non c’era semplicemente un’altra opzione.

L’override dei template non è una funzionalità “supportata”.

Certo, puoi farlo a tuo rischio e pericolo, e probabilmente andrà tutto bene. Ma non è qualcosa che possiamo garantire o testare.

Apprezzo che tu abbia reso la situazione meno problematica qui!

Mi piacerebbe solo che riuscissimo a mantenere una situazione in cui i plugin rimanessero completamente modulari, laddove possibile.

In effetti era questo il problema. Hai qualche consiglio per nascondere/rimuovere questi plugin? Mi sembra che rimuovere i plugin che non utilizziamo non dovrebbe compromettere la build, dato che i plugin dovrebbero essere modulari.

Il metodo “supportato” consiste nel disabilitare i plugin tramite l’interfaccia di amministrazione.

Sei libero di eliminarli dal filesystem e “probabilmente” funzionerà (come dici, idealmente i plugin dovrebbero essere modulari). Tuttavia, al momento non è qualcosa che testiamo rigorosamente, quindi non posso darti una garanzia al 100%.

Grazie David, apprezzo i tuoi consigli.

Condivido pienamente il tuo punto di vista.

Mi sembra logico che si debba poter nascondere al 100% i plugin dall’interfaccia di amministrazione (per impostazione predefinita) per ridurre il disordine (non semplicemente disabilitarli).

I plugin dovrebbero essere assolutamente modulari.

Sebbene rispetti il fatto che a volte ci siano considerazioni tecniche, secondo me questo dovrebbe essere l’obiettivo finale.

Ma celebriamo anche il fatto che questa inclusione ha facilitato build molto molto più veloci :rocket: