Em #38658, o compilador de plugin do rollup está habilitado por padrão, no entanto, um plugin pode desaparecer se sua entrada de manifesto gerada estiver ausente ou desatualizada, por exemplo, o plugin Chat.
Este commit adiciona a lógica usando o caminho de pesquisa de manifesto existente para compilar o pacote do plugin sob demanda em desenvolvimento, e então tentar novamente a pesquisa, impedindo que plugins como o chat falhem silenciosamente ao carregar no desenvolvimento local após a troca do rollup.
Além disso, um spec que falha é adicionado para proteger contra regressão.
Antes:
Mesmo que o plugin estivesse habilitado, nada acontecia no contêiner de desenvolvimento.
Os recursos do plugin são compilados automaticamente quando você inicia o servidor no modo de desenvolvimento. Essa é a linha “[PluginJsWatcher]” no log que você capturou na tela. Nós projetamos o sistema deliberadamente para acontecer em segundo plano, em vez de fazer a compilação ocorrer durante as requisições web.
Muitos membros da nossa equipe têm usado este sistema em desenvolvimento nas últimas semanas, então deve haver algo específico no seu sistema que está fazendo com que ele falhe.
Como você está iniciando seu servidor? Você tem alguma variável de ambiente incomum definida?
Iniciei o servidor usando o devcontainer, atualizei-o de uma versão anterior usando git pull e depois usei ctrl+shift+b para iniciar o servidor, mas o plugin nunca é compilado quando iniciado.
O console mostra o seguinte, mas o chat nunca é compilado.
Ember CLI rodando no PID: 3456
Iniciando o observador de mudança de CSS
[ember-cli] Proxy para http://127.0.0.1:3000
[ember-cli] construindo...
[ember-cli] ...[BroccoliMergeFiles]
I, [2026-03-20T09:47:37.703686 #3481] INFO -- : escutando em 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 pronto
I, [2026-03-20T09:47:43.340508 #3466] INFO -- : monitor pid=3466 pronto
I, [2026-03-20T09:47:43.340654 #3466] INFO -- : processo monitor pronto
I, [2026-03-20T09:47:43.361234 #3481] INFO -- : service 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 -- : service gen=0 pid=4278 iniciado
I, [2026-03-20T09:47:46.413532 #4278] INFO -- : iniciando 1 sidekiqs supervisionados
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 pronto
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 pronto
I, [2026-03-20T09:47:50.758417 #4381] INFO -- : Carregando Sidekiq no processo 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 pronto
[ember-cli] ...[@embroider/compat/app]
escrevendo arquivo pid /workspace/discourse/tmp/pids/plugin_js_watcher_0.pid para 4554
I, [2026-03-20T09:47:54.484062 #4554] INFO -- : [PluginJsWatcher] Carregando PluginJsWatcher no processo id 4554
[ember-cli] ...[@embroider/webpack]
[Plugin::JsManager] Compilando 43 plugins...
[ember-cli] ...[@embroider/webpack]
[ember-cli] ...[@embroider/webpack]
[ember-cli] arquivo adicionado checklist
[ember-cli] ...[@embroider/webpack]
[ember-cli] ...[@embroider/webpack]
[ember-cli] ...[@embroider/webpack]
Thread do observador JS do Plugin finalizado
/workspace/discourse/lib/asset_processor.rb:169:in `MiniRacer::Context#call': terminated (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 `<required>`
from /workspace/discourse/bin/pitchfork:58:in `Kernel#load'
from /workspace/discourse/bin/pitchfork:58:in `block in <main>'
from /workspace/discourse/bin/pitchfork:58:in `Kernel#fork'
from /workspace/discourse/bin/pitchfork:58:in `<main>'
[ember-cli] ...[@embroider/webpack]
[ember-cli] ...[@embroider/webpack]
[ember-cli] ...[@embroider/webpack]
[ember-cli] ...[Babel: discourse > applyPatches]
[ember-cli]
[ember-cli] Build successful (105607ms) – Serving on http://localhost:4200/
[ember-cli]
[ember-cli] Nodes Mais 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] construindo...
[ember-cli] ...[@embroider/webpack]
[ember-cli]
[ember-cli] Build successful (4541ms) – Serving on http://localhost:4200/
[ember-cli]
[ember-cli] Nodes Mais 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]
Parece que a compilação inicial do chat está excedendo o tempo limite na sua máquina. Vamos aumentar isso, para que funcione melhor em ambientes mais lentos:
Se você puder disponibilizar mais recursos de CPU/memória no seu ambiente docker, isso melhorará sua experiência de desenvolvimento. Mas pelo menos este aumento deve fazer funcionar.