ИСПРАВЛЕНИЕ: Компиляция отсутствующих бандлов плагина rollup по требованию в режиме разработки

В #38658 компилятор плагина rollup включён по умолчанию, однако плагин может исчезнуть, если его запись в сгенерированном манифесте отсутствует или устарела, например, плагин Chat.

Этот коммит добавляет логику, использующую существующий путь поиска в манифесте для компиляции бандла плагина по требованию в режиме разработки, после чего выполняется повторный поиск. Это предотвращает тихий сбой загрузки плагинов, таких как чат, в локальной разработке после перехода на rollup.

Также добавлен падающий тест для защиты от регрессии.


До:

Даже если плагин включён, в контейнере разработки ничего не происходило.

После:

2 лайка

Ассеты плагинов компилируются автоматически при запуске сервера в режиме разработки. Это строка «[PluginJsWatcher]» в логе, который вы приложили в скриншоте. Мы намеренно спроектировали систему так, чтобы компиляция происходила в фоновом режиме, а не во время обработки веб-запросов.

Многие из нашей команды используют эту систему в разработке уже несколько недель, поэтому проблема, скорее всего, связана с особенностями вашей среды, из-за чего компиляция не удаётся. :thinking:

Как именно вы запускаете сервер? Установлены ли у вас какие-либо нестандартные переменные окружения?

Я запустил сервер через devcontainer, обновил его из предыдущей версии с помощью git pull, а затем нажал Ctrl+Shift+B для запуска сервера. Однако плагин не компилируется при запуске.

Переменные окружения не заданы.

В консоли вы видели строки [PluginJsWatcher]? Видели ли вы что-то вроде [Plugin::JsManager] Завершена начальная компиляция плагинов за 5.9 с?

До изменения — нет.

Сервер только что запустился с состоянием ready, но чат не скомпилирован.

Я загружу запись экрана.

1 лайк

Похоже, видео слишком большое.

Попробуйте это: удалите /app/assets/generated.

В консоли отображается следующее, но чат так и не компилируется.

Ember CLI запущен с PID: 3456
Запуск наблюдателя за изменениями CSS
[ember-cli] Проксирование на http://127.0.0.1:3000
[ember-cli] сборка... 
[ember-cli] ...[BroccoliMergeFiles]
I, [2026-03-20T09:47:37.703686 #3481]  INFO -- : прослушивание адреса=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 готов
I, [2026-03-20T09:47:43.340508 #3466]  INFO -- : монитор pid=3466 готов
I, [2026-03-20T09:47:43.340654 #3466]  INFO -- : процесс монитора готов
I, [2026-03-20T09:47:43.361234 #3481]  INFO -- : сервис gen=0 запускается...
I, [2026-03-20T09:47:44.817214 #3481]  INFO -- : воркер=0 gen=0 запускается...
[ember-cli] ...[Babel: @embroider/macros > applyPatches]
[ember-cli] ...[Babel: ember-this-fallback > applyPatches]
I, [2026-03-20T09:47:46.412287 #3466]  INFO -- : сервис gen=0 pid=4278 запущен
I, [2026-03-20T09:47:46.413532 #4278]  INFO -- : запуск 1 контролируемого sidekiq
I, [2026-03-20T09:47:46.716314 #3481]  INFO -- : воркер=1 gen=0 запускается...
I, [2026-03-20T09:47:48.556407 #3466]  INFO -- : воркер=0 gen=0 pid=4316 зарегистрирован
I, [2026-03-20T09:47:48.610839 #4316]  INFO -- : воркер=0 gen=0 pid=4316 готов
I, [2026-03-20T09:47:48.651842 #3481]  INFO -- : воркер=2 gen=0 запускается...
I, [2026-03-20T09:47:50.233024 #3466]  INFO -- : воркер=1 gen=0 pid=4371 зарегистрирован
I, [2026-03-20T09:47:50.514859 #4371]  INFO -- : воркер=1 gen=0 pid=4371 готов
I, [2026-03-20T09:47:50.758417 #4381]  INFO -- : Загрузка Sidekiq в процессе id 4381
I, [2026-03-20T09:47:52.373478 #3466]  INFO -- : воркер=2 gen=0 pid=4413 зарегистрирован
I, [2026-03-20T09:47:52.452613 #4413]  INFO -- : воркер=2 gen=0 pid=4413 готов
[ember-cli] ...[@embroider/compat/app]
запись pid-файла /workspace/discourse/tmp/pids/plugin_js_watcher_0.pid для 4554
I, [2026-03-20T09:47:54.484062 #4554]  INFO -- : [PluginJsWatcher] Загрузка PluginJsWatcher в процессе id 4554
[ember-cli] ...[@embroider/webpack]
[Plugin::JsManager] Компиляция 43 плагинов...
[ember-cli] ...[@embroider/webpack]
[ember-cli] ...[@embroider/webpack]
[ember-cli] файл добавлен в список
[ember-cli] ...[@embroider/webpack]
[ember-cli] ...[@embroider/webpack]
[ember-cli] ...[@embroider/webpack]
Поток наблюдателя за JS плагином завершен
/workspace/discourse/lib/asset_processor.rb:169:in 'MiniRacer::Context#call': завершено (MiniRacer::ScriptTerminatedError)
        из /workspace/discourse/lib/asset_processor.rb:169:in 'block in AssetProcessor.v8_call'
        из /workspace/discourse/lib/asset_processor.rb:168:in 'Thread::Mutex#synchronize'
        из /workspace/discourse/lib/asset_processor.rb:168:in 'AssetProcessor.v8_call'
        из /workspace/discourse/lib/asset_processor.rb:244:in 'AssetProcessor#rollup'
        из /workspace/discourse/lib/plugin/js_compiler.rb:21:in 'Plugin::JsCompiler#compile!'
        из /workspace/discourse/lib/plugin/js_manager.rb:132:in 'Plugin::JsManager#compile_js_bundle'
        из /workspace/discourse/lib/plugin/js_manager.rb:57:in 'block in Plugin::JsManager#compile!'
        из /home/discourse/.bundle/gems/ruby/3.4.0/gems/parallel-1.27.0/lib/parallel.rb:650:in 'Parallel.call_with_index'
        из /home/discourse/.bundle/gems/ruby/3.4.0/gems/parallel-1.27.0/lib/parallel.rb:620:in 'Parallel.process_incoming_jobs'
        из /home/discourse/.bundle/gems/ruby/3.4.0/gems/parallel-1.27.0/lib/parallel.rb:600:in 'block in Parallel.worker'
        из /home/discourse/.bundle/gems/ruby/3.4.0/gems/parallel-1.27.0/lib/parallel.rb:591:in 'Process.fork'
        из /home/discourse/.bundle/gems/ruby/3.4.0/gems/parallel-1.27.0/lib/parallel.rb:591:in 'Parallel.worker'
        из /home/discourse/.bundle/gems/ruby/3.4.0/gems/parallel-1.27.0/lib/parallel.rb:582:in 'block in Parallel.create_workers'
        из /home/discourse/.bundle/gems/ruby/3.4.0/gems/parallel-1.27.0/lib/parallel.rb:581:in 'Array#each'
        из /home/discourse/.bundle/gems/ruby/3.4.0/gems/parallel-1.27.0/lib/parallel.rb:581:in 'Enumerable#each_with_index'
        из /home/discourse/.bundle/gems/ruby/3.4.0/gems/parallel-1.27.0/lib/parallel.rb:581:in 'Parallel.create_workers'
        из /home/discourse/.bundle/gems/ruby/3.4.0/gems/parallel-1.27.0/lib/parallel.rb:520:in 'Parallel.work_in_processes'
        из /home/discourse/.bundle/gems/ruby/3.4.0/gems/parallel-1.27.0/lib/parallel.rb:291:in 'Parallel.map'
        из /home/discourse/.bundle/gems/ruby/3.4.0/gems/parallel-1.27.0/lib/parallel.rb:235:in 'Parallel.each'
        из /workspace/discourse/lib/plugin/js_manager.rb:56:in 'Plugin::JsManager#compile!'
        из /workspace/discourse/lib/plugin/js_manager.rb:190:in 'Plugin::JsManager#watch'
        из /workspace/discourse/lib/demon/plugin_js_watcher.rb:17:in 'Demon::PluginJsWatcher#after_fork'
        из /workspace/discourse/lib/demon/base.rb:188:in 'block in Demon::Base#run'
        из /workspace/discourse/lib/demon/base.rb:184:in 'Kernel#fork'
        из /workspace/discourse/lib/demon/base.rb:184:in 'Demon::Base#run'
        из /workspace/discourse/lib/demon/base.rb:177:in 'Demon::Base#start'
        из /workspace/discourse/lib/demon/base.rb:30:in 'block in Demon::Base.start'
        из <internal:numeric>:257:in 'Integer#times'
        из /workspace/discourse/lib/demon/base.rb:30:in 'Demon::Base.start'
        из /workspace/discourse/config/pitchfork.conf.rb:126:in 'block in Pitchfork::Configurator#load'
        из /home/discourse/.bundle/gems/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork/http_server.rb:631:in 'Pitchfork::HttpServer#service_loop'
        из /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'
        из /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'
        из /home/discourse/.bundle/gems/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork.rb:170:in 'block in Pitchfork.clean_fork'
        из /home/discourse/.bundle/gems/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork.rb:168:in 'Kernel#catch'
        из /home/discourse/.bundle/gems/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork.rb:168:in 'Pitchfork.clean_fork'
        из /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'
        из /home/discourse/.bundle/gems/ruby/3.4.0/gems/pitchfork-0.18.2/lib/pitchfork/http_server.rb:176:in 'Pitchfork::HttpServer#start'
        из /home/discourse/.bundle/gems/ruby/3.4.0/gems/pitchfork-0.18.2/exe/pitchfork:110:in '<top (required)>'
        из /workspace/discourse/bin/pitchfork:58:in 'Kernel#load'
        из /workspace/discourse/bin/pitchfork:58:in 'block in <main>'
        из /workspace/discourse/bin/pitchfork:58:in 'Kernel#fork'
        из /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] Сборка успешна (105607 мс) – Сервер работает на http://localhost:4200/
[ember-cli] 
[ember-cli] Самые медленные узлы (время >= 5%) | Всего (среднее)
[ember-cli] -+-
[ember-cli] @embroider/webpack (1) | 86394 мс
[ember-cli] @embroider/compat/app (1) | 6764 мс
[ember-cli] Babel: pretty-text (1) | 5364 мс
[ember-cli] 
[ember-cli] сборка... 
[ember-cli] ...[@embroider/webpack]
[ember-cli] 
[ember-cli] Сборка успешна (4541 мс) – Сервер работает на http://localhost:4200/
[ember-cli] 
[ember-cli] Самые медленные узлы (время >= 5%) | Всего (среднее)
[ember-cli] -+-
[ember-cli] @embroider/webpack (1) | 2508 мс
[ember-cli] Funnel (179) | 1005 мс (5 мс)
[ember-cli] @embroider/compat/app (1) | 415 мс
[ember-cli] broccoli-persistent-filter:Mapper (3) | 353 мс (117 мс)
[ember-cli] 

Ага, спасибо!

Похоже, что начальная компиляция чата на вашем компьютере завершается по тайм-ауту. Давайте увеличим этот лимит, чтобы всё работало лучше в менее производительных средах:

Если вы сможете выделить больше ресурсов CPU и памяти в вашей Docker-окружении, это улучшит процесс разработки. Но как минимум это увеличение должно помочь запустить всё корректно.

3 лайка

Эта тема была автоматически закрыта через 19 часов. Новые ответы больше не принимаются.