إصلاح: تجميع حزم إضافات التجميع المفقودة عند الطلب في التطوير

في #38658، تم تمكين مُصرِّف إضافة rollup بشكل افتراضي، ومع ذلك، قد تختفي إضافة ما إذا كان إدخال البيان الذي تم إنشاؤه مفقودًا أو قديمًا، على سبيل المثال إضافة Chat.

تضيف هذه الالتزام المنطق باستخدام مسار البحث الحالي للبيان لتجميع حزمة الإضافة عند الطلب في التطوير، ثم إعادة محاولة البحث، مما يمنع الإضافات مثل الدردشة من الفشل بصمت في التحميل في التطوير المحلي بعد تبديل rollup.

أيضًا، تمت إضافة اختبار فاشل للحماية من التراجع.


قبل:

حتى لو كانت الإضافة ممكّنة، لم يحدث شيء في حاوية التطوير.

بعد:

إعجابَين (2)

يتم تجميع أصول الملحق تلقائيًا عند تشغيل الخادم في وضع التطوير. هذا هو السطر “[PluginJsWatcher]” في السجل الذي قمت بتصويره. لقد صممنا النظام عمداً ليحدث في الخلفية، بدلاً من جعل التجميع يحدث أثناء طلبات الويب.

استخدم العديد من أعضاء فريقنا هذا النظام في التطوير على مدى الأسابيع القليلة الماضية، لذا يجب أن يكون هناك شيء محدد في نظامك هو الذي يتسبب في فشله. :thinking:

كيف تبدأ الخادم الخاص بك؟ هل لديك أي متغيرات بيئة غير عادية مضبوطة؟

لقد بدأت الخادم باستخدام devcontainer، وقمت بتحديثه من إصدار سابق باستخدام git pull، ثم استخدمت ctrl+shift+b لبدء تشغيل الخادم، وبعد ذلك لا يتم تجميع المكون الإضافي أبدًا عند البدء.

لم يتم تعيين أي متغيرات بيئة.

في وحدة التحكم، هل رأيت أسطر [PluginJsWatcher]؟ هل رأيت شيئًا مثل [Plugin::JsManager] Finished initial compilation of plugins in 5.9s؟

قبل التغيير، لا.

بدأ الخادم للتو وجاهزًا، لكن الدردشة غير مُترجمة.

سأقوم بتحميل تسجيل شاشة.

إعجاب واحد (1)

يبدو أن الفيديو كبير جدًا.

جرب هذا: إزالة /app/assets/generated
تعرض الشاشة النتائج التالية، لكن الدردشة لا يتم تجميعها أبدًا.

Ember CLI running on PID: 3456
Starting CSS change watcher
[ember-cli] Proxying to http://127.0.0.1:3000
[ember-cli] building... 
[ember-cli] ...[BroccoliMergeFiles]
I, [2026-03-20T09:47:37.703686 #3481]  INFO -- : listening on 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 ready
I, [2026-03-20T09:47:43.340508 #3466]  INFO -- : monitor pid=3466 ready
I, [2026-03-20T09:47:43.340654 #3466]  INFO -- : monitor process ready
I, [2026-03-20T09:47:43.361234 #3481]  INFO -- : service gen=0 spawning...
I, [2026-03-20T09:47:44.817214 #3481]  INFO -- : worker=0 gen=0 spawning...
[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 spawned
I, [2026-03-20T09:47:46.413532 #4278]  INFO -- : starting 1 supervised sidekiqs
I, [2026-03-20T09:47:46.716314 #3481]  INFO -- : worker=1 gen=0 spawning...
I, [2026-03-20T09:47:48.556407 #3466]  INFO -- : worker=0 gen=0 pid=4316 registered
I, [2026-03-20T09:47:48.610839 #4316]  INFO -- : worker=0 gen=0 pid=4316 ready
I, [2026-03-20T09:47:48.651842 #3481]  INFO -- : worker=2 gen=0 spawning...
I, [2026-03-20T09:47:50.233024 #3466]  INFO -- : worker=1 gen=0 pid=4371 registered
I, [2026-03-20T09:47:50.514859 #4371]  INFO -- : worker=1 gen=0 pid=4371 ready
I, [2026-03-20T09:47:50.758417 #4381]  INFO -- : Loading Sidekiq in process id 4381
I, [2026-03-20T09:47:52.373478 #3466]  INFO -- : worker=2 gen=0 pid=4413 registered
I, [2026-03-20T09:47:52.452613 #4413]  INFO -- : worker=2 gen=0 pid=4413 ready
[ember-cli] ...[@embroider/compat/app]
writing pid file /workspace/discourse/tmp/pids/plugin_js_watcher_0.pid for 4554
I, [2026-03-20T09:47:54.484062 #4554]  INFO -- : [PluginJsWatcher] Loading PluginJsWatcher in process id 4554
[ember-cli] ...[@embroider/webpack]
[Plugin::JsManager] Compiling 43 plugins...
[ember-cli] ...[@embroider/webpack]
[ember-cli] ...[@embroider/webpack]
[ember-cli] file added checklist
[ember-cli] ...[@embroider/webpack]
[ember-cli] ...[@embroider/webpack]
[ember-cli] ...[@embroider/webpack]
Finished Plugin JS watcher thread
/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 /home/discourse/.bundle/gems/ruby/3.4.0/gems/ruby-3.4.0/lib/numeric.rb:257:in '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] Slowest Nodes (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] building... 
[ember-cli] ...[@embroider/webpack]
[ember-cli] 
[ember-cli] Build successful (4541ms) – Serving on http://localhost:4200/
[ember-cli] 
[ember-cli] Slowest Nodes (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] 

آها، شكرًا لك!

يبدو أن التصريف الأولي للدردشة ينتهي وقته على جهازك. دعنا نزيد ذلك، لكي يعمل بشكل أفضل في البيئات الأبطأ:

إذا كنت قادرًا على توفير المزيد من موارد وحدة المعالجة المركزية/الذاكرة في بيئة Docker الخاصة بك، فسيؤدي ذلك إلى تحسين تجربة التطوير لديك. ولكن على الأقل، يجب أن يؤدي هذا التعديل إلى جعله يعمل.

إعجابَين (2)