SOLUCIÓN: Compilar paquetes de plugin rollup faltantes bajo demanda en desarrollo

En #38658, el compilador del complemento rollup está habilitado por defecto, sin embargo, un complemento puede desaparecer si su entrada de manifiesto generada falta o está obsoleta, por ejemplo, el complemento Chat.

Este commit añade la lógica utilizando la ruta de búsqueda de manifiesto existente para compilar el paquete del complemento bajo demanda en desarrollo, y luego reintentar la búsqueda, evitando que complementos como chat fallen silenciosamente al cargar en el desarrollo local después del cambio de rollup.

Además, se añade una especificación fallida para proteger contra regresiones.


Antes:

Incluso si el complemento está habilitado, no sucedió nada en el contenedor de desarrollo.

Después:

2 Me gusta

Los activos de los complementos se compilan automáticamente cuando inicias el servidor en modo de desarrollo. Esa es la línea “[PluginJsWatcher]” en el registro que capturaste en la captura de pantalla. Diseñamos deliberadamente el sistema para que ocurra en segundo plano, en lugar de hacer que la compilación ocurra durante las solicitudes web.

Muchos de los miembros de nuestro equipo han estado utilizando este sistema en desarrollo durante las últimas semanas, por lo que debe haber algo específico en su sistema que esté causando que falle. :thinking:

¿Cómo estás iniciando tu servidor? ¿Tienes alguna variable de entorno inusual configurada?

Comencé el servidor usando devcontainer, lo actualicé desde una versión anterior usando git pull, y luego uso ctrl+shift+b para iniciar el servidor, pero el plugin nunca se compila al iniciarse.

No se establecieron variables de entorno.

En la consola, ¿viste las líneas [PluginJsWatcher]? ¿Viste algo como [Plugin::JsManager] Finalizada la compilación inicial de plugins en 5.9s?

Antes del cambio, no.

El servidor acaba de iniciarse con listo, pero el chat no se compila.

Voy a subir una grabación de pantalla.

1 me gusta

Parece que el video es demasiado grande.

Prueba esto: eliminando /app/assets/generated
La consola muestra lo siguiente, pero chat nunca se compila.

Ember CLI ejecutándose en PID: 3456
Iniciando observador de cambios de CSS
[ember-cli] Proxy a http://127.0.0.1:3000
[ember-cli] construyendo... 
[ember-cli] ...[BroccoliMergeFiles]
I, [2026-03-20T09:47:37.703686 #3481]  INFO -- : escuchando en addr=127.0.0.1:3000 fd=38
[ember-cli] ...[ConfigLoader]
[ember-cli] ...[Babel: ember-tracked-storage-polyfill > applyPatches]
[ember-cli] ...[Babel: pretty-text > applyPatches]
I, [2026-03-20T09:47:43.338485 #3466]  INFO -- : mold gen=0 pid=3481 listo
I, [2026-03-20T09:47:43.340508 #3466]  INFO -- : monitor pid=3466 listo
I, [2026-03-20T09:47:43.340654 #3466]  INFO -- : proceso monitor listo
I, [2026-03-20T09:47:43.361234 #3481]  INFO -- : servicio gen=0 iniciando...
I, [2026-03-20T09:47:44.817214 #3481]  INFO -- : worker=0 gen=0 iniciando...
[ember-cli] ...[Babel: @embroider/macros > applyPatches]
[ember-cli] ...[Babel: ember-this-fallback > applyPatches]
I, [2026-03-20T09:47:46.412287 #3466]  INFO -- : servicio gen=0 pid=4278 iniciado
I, [2026-03-20T09:47:46.413532 #4278]  INFO -- : iniciando 1 sidekiqs supervisados
I, [2026-03-20T09:47:46.716314 #3481]  INFO -- : worker=1 gen=0 iniciando...
I, [2026-03-20T09:47:48.556407 #3466]  INFO -- : worker=0 gen=0 pid=4316 registrado
I, [2026-03-20T09:47:48.610839 #4316]  INFO -- : worker=0 gen=0 pid=4316 listo
I, [2026-03-20T09:47:48.651842 #3481]  INFO -- : worker=2 gen=0 iniciando...
I, [2026-03-20T09:47:50.233024 #3466]  INFO -- : worker=1 gen=0 pid=4371 registrado
I, [2026-03-20T09:47:50.514859 #4371]  INFO -- : worker=1 gen=0 pid=4371 listo
I, [2026-03-20T09:47:50.758417 #4381]  INFO -- : Cargando Sidekiq en el proceso id 4381
I, [2026-03-20T09:47:52.373478 #3466]  INFO -- : worker=2 gen=0 pid=4413 registrado
I, [2026-03-20T09:47:52.452613 #4413]  INFO -- : worker=2 gen=0 pid=4413 listo
[ember-cli] ...[@embroider/compat/app]
escribiendo archivo pid /workspace/discourse/tmp/pids/plugin_js_watcher_0.pid para 4554
I, [2026-03-20T09:47:54.484062 #4554]  INFO -- : [PluginJsWatcher] Cargando PluginJsWatcher en el proceso id 4554
[ember-cli] ...[@embroider/webpack]
[Plugin::JsManager] Compilando 43 plugins...
[ember-cli] ...[@embroider/webpack]
[ember-cli] ...[@embroider/webpack]
[ember-cli] archivo añadido checklist
[ember-cli] ...[@embroider/webpack]
[ember-cli] ...[@embroider/webpack]
[ember-cli] ...[@embroider/webpack]
Terminado el hilo del observador de JS de plugins
/workspace/discourse/lib/asset_processor.rb:169:in 'MiniRacer::Context#call': terminado (MiniRacer::ScriptTerminatedError)
        from /workspace/discourse/lib/asset_processor.rb:169:in 'block in AssetProcessor.v8_call'
        from /workspace/discourse/lib/asset_processor.rb:168:in 'Thread::Mutex#synchronize'
        from /workspace/discourse/lib/asset_processor.rb:168:in 'AssetProcessor.v8_call'
        from /workspace/discourse/lib/asset_processor.rb:244:in 'AssetProcessor#rollup'
        from /workspace/discourse/lib/plugin/js_compiler.rb:21:in 'Plugin::JsCompiler#compile!'
        from /workspace/discourse/lib/plugin/js_manager.rb:132:in 'Plugin::JsManager#compile_js_bundle'
        from /workspace/discourse/lib/plugin/js_manager.rb:57:in 'block in Plugin::JsManager#compile!'
        from /home/discourse/.bundle/gems/ruby/3.4.0/gems/parallel-1.27.0/lib/parallel.rb:650:in 'Parallel.call_with_index'
        from /home/discourse/.bundle/gems/ruby/3.4.0/gems/parallel-1.27.0/lib/parallel.rb:620:in 'Parallel.process_incoming_jobs'
        from /home/discourse/.bundle/gems/ruby/3.4.0/gems/parallel-1.27.0/lib/parallel.rb:600:in 'block in Parallel.worker'
        from /home/discourse/.bundle/gems/ruby/3.4.0/gems/parallel-1.27.0/lib/parallel.rb:591:in 'Process.fork'
        from /home/discourse/.bundle/gems/ruby/3.4.0/gems/parallel-1.27.0/lib/parallel.rb:591:in 'Parallel.worker'
        from /home/discourse/.bundle/gems/ruby/3.4.0/gems/parallel-1.27.0/lib/parallel.rb:582:in 'block in Parallel.create_workers'
        from /home/discourse/.bundle/gems/ruby/3.4.0/gems/parallel-1.27.0/lib/parallel.rb:581:in 'Array#each'
        from /home/discourse/.bundle/gems/ruby/3.4.0/gems/parallel-1.27.0/lib/parallel.rb:581:in 'Enumerable#each_with_index'
        from /home/discourse/.bundle/gems/ruby/3.4.0/gems/parallel-1.27.0/lib/parallel.rb:581:in 'Parallel.create_workers'
        from /home/discourse/.bundle/gems/ruby/3.4.0/gems/parallel-1.27.0/lib/parallel.rb:520:in 'Parallel.work_in_processes'
        from /home/discourse/.bundle/gems/ruby/3.4.0/gems/parallel-1.27.0/lib/parallel.rb:291:in 'Parallel.map'
        from /home/discourse/.bundle/gems/ruby/3.4.0/gems/parallel-1.27.0/lib/parallel.rb:235:in 'Parallel.each'
        from /workspace/discourse/lib/plugin/js_manager.rb:56:in 'Plugin::JsManager#compile!'
        from /workspace/discourse/lib/plugin/js_manager.rb:190:in 'Plugin::JsManager#watch'
        from /workspace/discourse/lib/demon/plugin_js_watcher.rb:17:in 'Demon::PluginJsWatcher#after_fork'
        from /workspace/discourse/lib/demon/base.rb:188:in 'block in Demon::Base#run'
        from /workspace/discourse/lib/demon/base.rb:184:in 'Kernel#fork'
        from /workspace/discourse/lib/demon/base.rb:184:in 'Demon::Base#run'
        from /workspace/discourse/lib/demon/base.rb:177:in 'Demon::Base#start'
        from /workspace/discourse/lib/demon/base.rb:30:in 'block in Demon::Base.start'
        from \u003cinternal:numeric\u003e:257:in 'Integer#times'
        from /workspace/discourse/lib/demon/base.rb:30:in 'Demon::Base.start'
        from /workspace/discourse/config/pitchfork.conf.rb:126:in 'block in Pitchfork::Configurator#load'
        from /home/discourse/.bundle/gems/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork/http_server.rb:631:in 'Pitchfork::HttpServer#service_loop'
        from /home/discourse/.bundle/gems/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork/http_server.rb:680:in 'block in Pitchfork::HttpServer#spawn_service'
        from /home/discourse/.bundle/gems/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork/http_server.rb:1222:in 'block in Pitchfork::HttpServer#fork_sibling'
        from /home/discourse/.bundle/gems/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork.rb:170:in 'block in Pitchfork.clean_fork'
        from /home/discourse/.bundle/gems/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork.rb:168:in 'Kernel#catch'
        from /home/discourse/.bundle/gems/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork.rb:168:in 'Pitchfork.clean_fork'
        from /home/discourse/.bundle/gems/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork/http_server.rb:690:in 'Pitchfork::HttpServer#spawn_initial_mold'
        from /home/discourse/.bundle/gems/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork/http_server.rb:176:in 'Pitchfork::HttpServer#start'
        from /home/discourse/.bundle/gems/ruby/3.4.0/gems/pitchfork-0.18.2/exe/pitchfork:110:in '\u003ctop (required)\u003e'
        from /workspace/discourse/bin/pitchfork:58:in 'Kernel#load'
        from /workspace/discourse/bin/pitchfork:58:in 'block in \u003cmain\u003e'
        from /workspace/discourse/bin/pitchfork:58:in 'Kernel#fork'
        from /workspace/discourse/bin/pitchfork:58:in '\u003cmain\u003e'
[ember-cli] ...[@embroider/webpack]
[ember-cli] ...[@embroider/webpack]
[ember-cli] ...[@embroider/webpack]
[ember-cli] ...[Babel: discourse > applyPatches]
[ember-cli] 
[ember-cli] Construcción exitosa (105607ms) – Sirviendo en http://localhost:4200/
[ember-cli] 
[ember-cli] Nodos más lentos (totalTime >= 5%) | Total (avg)
[ember-cli] -+-
[ember-cli] @embroider/webpack (1) | 86394ms
[ember-cli] @embroider/compat/app (1) | 6764ms
[ember-cli] Babel: pretty-text (1) | 5364ms
[ember-cli] 
[ember-cli] construyendo... 
[ember-cli] ...[@embroider/webpack]
[ember-cli] 
[ember-cli] Construcción exitosa (4541ms) – Sirviendo en http://localhost:4200/
[ember-cli] 
[ember-cli] Nodos más lentos (totalTime >= 5%) | Total (avg)
[ember-cli] -+-
[ember-cli] @embroider/webpack (1) | 2508ms
[ember-cli] Funnel (179) | 1005ms (5 ms)
[ember-cli] @embroider/compat/app (1) | 415ms
[ember-cli] broccoli-persistent-filter:Mapper (3) | 353ms (117 ms)
[ember-cli] 

¡Ajá, gracias!

Parece que la compilación inicial del chat está agotando el tiempo de espera en tu máquina. Aumentemos eso para que funcione mejor en entornos más lentos:

Si puedes asignar más recursos de CPU/memoria a tu entorno docker, eso mejorará tu experiencia de desarrollo. Pero al menos este aumento debería hacer que funcione.

2 Me gusta