Ember.js: خطأ بعد الترقية إلى Ember 2.4

تم إنشاؤها على ٩ مارس ٢٠١٦  ·  79تعليقات  ·  مصدر: emberjs/ember.js

يحدث هذا الخطأ فقط بعد أن يكون التطبيق نشطًا ويعمل لفترة من الوقت ، مما يمنح المستخدم فرصة للتنقل بين عدة طرق مختلفة. من الصعب جدًا التكاثر ، ويبدو أنه "يحدث للتو" بعد فترة. لقد تمكنا من إعادة إنتاجه عدة مرات باستخدام بنية الإنتاج (ember.min.js) ، لكننا لم نستخدم تصميم تصحيح الأخطاء (ember.debug.js).

هنا المكدس:

 "Cannot read property '_lookupFactory' of undefined"

TypeError: Cannot read property '_lookupFactory' of undefined
    at i (https://qa-integration.batterii.com/assets/vendor-69da94618271be1c4338db3f0e942865.js:7:2712)
    at o (https://qa-integration.batterii.com/assets/vendor-69da94618271be1c4338db3f0e942865.js:7:2833)
    at Object.a [as default] (https://qa-integration.batterii.com/assets/vendor-69da94618271be1c4338db3f0e942865.js:7:2888)
    at Object.i [as subexpr] (https://qa-integration.batterii.com/assets/vendor-69da94618271be1c4338db3f0e942865.js:6:4717)
    at a (https://qa-integration.batterii.com/assets/vendor-69da94618271be1c4338db3f0e942865.js:15:16476)
    at i (https://qa-integration.batterii.com/assets/vendor-69da94618271be1c4338db3f0e942865.js:15:16302)
    at n (https://qa-integration.batterii.com/assets/vendor-69da94618271be1c4338db3f0e942865.js:15:16189)
    at Object.r [as acceptHash] (https://qa-integration.batterii.com/assets/vendor-69da94618271be1c4338db3f0e942865.js:15:16075)
    at n (https://qa-integration.batterii.com/assets/vendor-69da94618271be1c4338db3f0e942865.js:15:26102)
    at Object.a.inline (https://qa-integration.batterii.com/assets/vendor-69da94618271be1c4338db3f0e942865.js:15:26664)

يبدو أن هذا يشير إلى مساعد البحث . في المرات القليلة التي كنت فيها محظوظًا بما يكفي لالتقاط هذا عند نقطة توقف ، لاحظت أن المعلمة owner المصغرة تصبح غير محددة. تبدو بقية env صحيحة. نرى:

image
image

أعلم أن هذا قليل جدًا. بعيدًا عن الخروج بطريقة سهلة لإعادة إنتاج هذا ، هل هناك أي معلومات إضافية حول المكدس قد تساعد في تصحيح هذا؟

Bug

التعليق الأكثر فائدة

تم إصدار الإصدار 2.4.3 مع إضافة العمل في https://github.com/emberjs/ember.js/pull/13118.

ال 79 كومينتر

الأمر الأكثر غرابة هو أنه يمكنك رؤيته في لقطة الشاشة الأخيرة ، هناك var s = "helper:" + e; على السطر 8786 ... ولكن بطريقة ما في السطر التالي s غير محدد. : confused: يبدو الأمر كما لو أن المكدس ينفجر ... أو أن مصحح أخطاء الكروم يخطئ.

لقد رأيت شيئًا كهذا أيضًا. نادرًا ما يحدث ولا أعرف كيف أتكاثر. كما أنني لست متأكدًا مما إذا كانت مشكلة تطبيقي أم شيء آخر.

raido هل المكدس الخاص بك هو نفسه _lookupFactory )؟ هل أنت على Ember 2.4.1؟ هل رأيت هذه المشكلة في الإصدارات السابقة من ember؟

قمنا بالترقية من Ember 2.2 => Ember 2.4 وبدأنا في رؤية هذه المشكلة بشكل كبير في سجلات الخادم الخاصة بنا في غضون أيام قليلة.

: +1: رأيت هذا بنفسي وأربكتني ، من سجلات bugsnag الخاصة بي:

11779      if (validateLazyHelperName(name, owner, env.hooks.keywords)) {
11780        var helperName = 'helper:' + name;
11781        if (owner.hasRegistration(helperName, options)) {
11782          helper = owner._lookupFactory(helperName, options);
11783        }
11784      }
11785    }

كما تقول ، كيف يمكن أن يكون owner undefined على السطر 11782 إذا تجاوز السطر السابق owner.hasRegistration ؟

وبالمثل لا يتم رؤيته إلا عند الإنتاج عند تصغيره (أعلاه يأتي من خرائط المصادر).

تظهر السجلات أننا رأيناها فقط على Chrome حتى الآن.

workmanw نعم ، يرتبط خطأي أيضًا بـ _lookupFactory ويرى lookupHelper في تتبع المكدس.

السجلات من إصدار الإنتاج ، حدثت الآن مع الإصدار 2.3.0

TypeError: Cannot read property '_lookupFactory' of undefined
    at o (vendor-6292d0672068025de3c6d57c1fb505d0.js:7)
    at Object.a [as default] (vendor-6292d0672068025de3c6d57c1fb505d0.js:7)
    at Object.r [as lookupHelper] (vendor-6292d0672068025de3c6d57c1fb505d0.js:6)
    at Object.D [as inline] (vendor-6292d0672068025de3c6d57c1fb505d0.js:16)
    at Object.i.inline (vendor-6292d0672068025de3c6d57c1fb505d0.js:16)
    at l.populateNodes (vendor-6292d0672068025de3c6d57c1fb505d0.js:16)
    at l.render (vendor-6292d0672068025de3c6d57c1fb505d0.js:16)
    at i (vendor-6292d0672068025de3c6d57c1fb505d0.js:16)
    at vendor-6292d0672068025de3c6d57c1fb505d0.js:16
    at s (vendor-6292d0672068025de3c6d57c1fb505d0.js:16)

أستطيع أن أؤكد هذه المشكلة في 2.4.2 ، أراها في بعض الأحيان في الإنتاج ، ولم تظهر في التطوير بعد. هل يمكن أن يكون سبب ذلك مفتش الأعضاء؟

لمزيد من المعلومات: لم يحدث هذا مطلقًا في 2.3.x والمكدس هو نفسه (_lookupFactory)

تحرير: يمكنني أن أؤكد أن هذه ليست مشكلة مفتش عضو ، حدث خطأ أثناء تعطيل المفتش.

تم تأكيد الخطأ في 2.4.1 و 2.4.2. يحدث فقط مع js المصغرة

jcbvm @ gdub22 هل منكما من إعادة إنتاجه باستمرار؟ لقد حاولت وحاولت العثور على مجموعة متسقة من الخطوات على الأقل في تطبيقنا على أمل بناء جمرة ، لكن لم يحالفني الحظ.

هذا حديث تمامًا وربما يكون رنجة حمراء ، ولكن يبدو أنه يحدث أثناء محاولة تقديم مساعد يحتوي على مكون سلف معروض بمساعد المكون ( {{component componentName}} ).

workmanw وبالمثل لم نتمكن من إعادة الإنتاج باستمرار ، فنحن نستخدم المساعد {{component}} كثيرًا عبر تطبيقنا.

workmanw ليس بنسبة 100 ٪ باستمرار ولكني أعتقد أنني قمت

يقوم Uglify بنقل الوظيفة أعلاه إلى:

function n(e,t,r,n){
  var i=r.helpers[e];
  if(!i){
    var o=r.owner;
    if (a(e,o,r.hooks.keywords)){
      var s="helper:"+e;
      o.hasRegistration(s,n) && (i=o._lookupFactory(s,n));
    }
  }
  return i;
}

لاحظ أنه تم تجميع كلا الوصول إلى الخاصية على owner وصولاً إلى سطر واحد. أظن أن التعطل يحدث بالفعل في المرة الأولى ، وأن دقة خريطة المصدر ليست عالية بما يكفي لتمييزها بشكل صحيح.

تم التعديل للإضافة: آه ، لكن الانهيار بالتأكيد هو _lookupFactory property ، لذا يجب أن تكون تكهناتي خاطئة. فضولي و فضولي.

@ ef4 ربما ... لكن في المرات القليلة التي o (في المقتطف الخاص بك) غير محدد ، لكن r.owner مالك صالح. في الواقع ، أنا قادر على عمل r.owner.hasRegistration(s,n) && (r.owner._lookupFactory(s,n)); والحصول على الفصل. تم منح هذا بعد أن كسر Chrome استثناءًا تم اكتشافه ... لذلك قد يكون مصحح الأخطاء أيضًا في حالة مضللة.

@ ef4 نعم إنه أمر غريب بالتأكيد.

هل يمكن أن يقوم V8 بتحسينه لسبب ما؟ من يعرف أكثر عن الفنون المظلمة لـ V8 ، stefanpenner ربما؟

إذا كان رمز الخط المعطل هو:

o.hasRegistration(s,n) && (i=o._lookupFactory(s,n));

ثم:

  1. أعاد o.hasRegistration(s,n) قيمة صادقة ؛ هذا يعنى
  2. o ليس null أو undefined ؛ وبالتالي
  3. Cannot read property '_lookupFactory' of undefined إما خطأ أو خطأ في الإصدار 8

هل فاتني شيء واضح؟

بالنسبة للأشخاص الذين أعادوا ظهور هذه المشكلة ، ما هو إصدار Chrome الذي تستخدمه؟ هل قمت بإعادة إنتاجه في Firefox أو IE أو Safari؟

wycats لا أرى أي شيء واضح أنك تفتقد. هذه هي نفس الاستنتاجات التي توصلت إليها. لقد رأينا فقط هذه المشكلة تم تسجيلها على Chrome الأحدث (48). في اختبار الاستنساخ ، كنت أستخدم 48.0.2564.116. أنا شخصياً لم أجرب Firefox أو IE أو Safari ، لكنني سأجربها وأبلغ عنها مرة أخرى.

تحرير: لا يمكنني تبسيط المشكلة إلى حد إنتاج لغز. ولكن إذا كان ذلك مفيدًا ، فيمكنني الوقوف في قائمة انتظار واحدة أو أكثر من حالات الفشل التي تم إيقافها مؤقتًا عند نقطة توقف ، والقفز على بطل الشاشة إذا أراد شخص ما أن يتجول في مصحح أخطاء الكروم. أحيانًا يمكنني إعادة إنتاجه 3 مرات في الدقيقة. أحيانًا يستغرق الأمر 20 دقيقة أو أكثر.

تضمين التغريدة قضيت آخر ساعة في تجربة Chrome و Safari و Firefox. تمكنت من إعادة إنتاجه عدة مرات في Chrome وليس على الإطلاق في Safari و Firefox. لست متأكدًا من أن هذا أمر حاسم ، لكنه بالتأكيد يشير أكثر فأكثر نحو مشكلة محددة في Chrome.

لم أتمكن من إعادة إنتاجه أيضًا. بالنسبة لي ، يحدث هذا عادةً عند تشغيل التطبيق. من المحتمل أن يؤدي إعادة تحميل التطبيق عدة مرات إلى تعطله ، لكنه ليس ثابتًا. قد يتعطل 5 مرات في دقائق فقط أو يستغرق نصف ساعة. لقد اختبرت على أحدث إصدار من Chrome.

workmanw أوصي بإجبار هذه الوظيفة على البقاء في أوضاع محددة ، فقد يساعدنا ذلك في معرفة المزيد حول المشكلة. عند هذه النقطة ، يجب علينا أيضًا إجراء اختبار ping لأصدقائنا في الإصدار 8. ولكن من أجل ذلك ، من المحتمل أن تكون هناك حاجة إلى إعادة إنتاج (حتى تطبيق كامل).

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

أولاً ، أود فقط تعطيل التضمين ، عن طريق تشغيل chromes v8 مع تعطيله: --nouse_inlining (أعتقد أن هذا قد يكون كافياً)

/Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary --js-flags="--nouse_inlining" --user-data-dir=/tmp/foobar

على الجانب الآخر ، حاول تعطيل العمود المرفقي معًا --crankshaft=false

/Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary --js-flags="--crankshaft=false" --user-data-dir=/tmp/foobar

تضمين التغريدة

لقد اختبرت ذلك باستخدام Chrome 48 (بدلاً من الكناري). إذا كنت تريد مني أن أجرب مع Canary ، فسأكون سعيدًا بذلك.

مع --nouse_inlining لم أتمكن من إعادة إظهار هذه المشكلة.
مع --crankshaft=false I كان قادرا على إعادة إنتاج هذه المسألة.

عند هذه النقطة ، يجب علينا أيضًا إجراء اختبار ping لأصدقائنا في الإصدار 8. ولكن من أجل ذلك ، من المحتمل أن تكون هناك حاجة إلى إعادة إنتاج (حتى تطبيق كامل).

أنا أفهم تماما. لقد قضيت حوالي 4 ساعات في محاولة "العمل إلى الأمام" وبناء Ember-twiddle التي تعيد إنتاج هذا. أنا فقط لا أفهم ما يكفي لما يحدث للقيام بذلك. لذلك سأبدأ الآن "العمل للخلف" باستخدام تطبيقنا لتبسيط الاستنساخ عن طريق تقليل خطوات الاستنساخ واستخراج أكبر قدر ممكن من تطبيقنا.

مع --nouse_inlining لم أتمكن من إعادة إنتاج هذه المشكلة.

يبدو متوقعًا ، لذلك من المرجح أن يكون مرتبطًا بخلل مضمّن من نوع ما.

باستخدام --crankshaft = false ، تمكنت من إعادة إنتاج هذه المشكلة.

قد تكون هذه علامة خاطئة ، لا أتذكر.

أنا أفهم تماما. لقد قضيت حوالي 4 ساعات في محاولة "العمل إلى الأمام" وبناء Ember-twiddle التي تعيد إنتاج هذا. أنا فقط لا أفهم ما يكفي لما يحدث للقيام بذلك. لذلك سأبدأ الآن "العمل للخلف" باستخدام تطبيقنا لتبسيط الاستنساخ عن طريق تقليل خطوات الاستنساخ واستخراج أكبر قدر ممكن من تطبيقنا.

workmanw هل من الممكن مشاركة التطبيق (أو عنوان URL للتطبيق) كما هو مع خطوات إعادة الإنتاج؟
في الواقع ، قد يكون إعادة إنتاج هذا في عزلة أمرًا صعبًا.

ج: sadpanda: الحل البديل ، هو إجبار الدالة على تجاوز الحد الأقصى لـ AST الذي يمكن تضمينه. يجب أن يسمح لك ذلك بما يلي:

وضع السلسلة التالية في جسم تلك الوظيفة ، يجب أن يؤدي الغرض (في الوقت الحالي ، تتغير هذه الحدود / الاستدلال مع مرور الوقت)

"Pork chop porchetta rump, bacon turducken filet mignon tri-tip drumstick picanha beef ribs sausage salami. Leberkas beef landjaeger bresaola, sausage meatloaf pastrami frankfurter ribeye jowl turducken drumstick flank. Pork loin shank tongue leberkas ham strip steak salami swine short ribs cupim. Strip steak sausage turkey tenderloin, alcatra turducken porchetta ribeye brisket spare ribs rump salami ground round tail frankfurter. Kielbasa cow porchetta, hamburger jowl salami turducken capicola beef. Corned beef meatloaf ball tip landjaeger shank pork belly. Short loin kielbasa pig tail, brisket cupim salami andouille hamburger sausage short ribs."

workmanw إذا كان بإمكانك أيضًا تسجيل الوصول إلى كناري ، فسيكون ذلك مفيدًا.

تضمين التغريدة

وضع السلسلة التالية في هذه الوظيفة ، يجب أن يؤدي الحيلة (في الوقت الحالي ، يمكن أن يتغير هذا الوقت الإضافي)

إن معرفتك بالأجزاء الداخلية لا تتوقف عن إدهاشي.

workmanw هل من الممكن مشاركة التطبيق كما هو مع خطوات إعادة الإنتاج؟

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

workmanw إذا كان بإمكانك أيضًا تسجيل الوصول إلى كناري ، فسيكون ذلك مفيدًا.

منجز. لقد راجعت "إصدار الكناري 51.0.2673.0 (64 بت) من الكناري" بدون أي من العلامات ولسوء الحظ لا يزال بإمكاني إعادة إنتاجه.

ربما يمكنني الحصول على موافقة على مشاركة المصدر إذا لزم الأمر ، ولكن يجب أن أفعل ذلك بشكل خاص.

سيساعدني ذلك شخصيًا في محاولة تقليل المشكلة بشكل أكبر ، على الرغم من عدم وجود ضمانات. أود أكثر أو أقل أن أفعل ما يلي:

  • تحضير نسخة لأفراد V8
  • استكشاف حلول [BUGFIX] مؤقتة
  • احصل على تقرير V8 في (اليوم / نهاية هذا الأسبوع)

مع وجود تطبيق أمامي (حيث يمكنني تغيير الرمز + الاستكشاف) ، قد يكون من الممكن اكتشاف حل / استنساخ مناسب.

تحرير: يستخدم التطبيق المرتبط أدناه بنية العضو الذي يحتوي على الحل البديل من PR # 13118. لم يعد صالحًا لإعادة إنتاج هذه المشكلة. إذا كان أي شخص مهتمًا بإعادة إنتاج هذه المشكلة باستخدام تطبيقنا ، فاتصل بي وربما يمكنني تحقيق ذلك.


stefanpenner لذلك قمت

هذا لا يزال غير قابل للتكرار بنسبة 100٪.

1) زيارة هذا الرابط: https://qa-integration.batterii.com/#/community/MTpDb21tdW5pdHksOTAwMQ/room/MTpSb29tLDE5NzQ2MzAwMQ/wall/MTpSb29tLDE5NzQ2MzAwMSxYWxsLDEw

2) تسجيل الدخول بالبريد الإلكتروني: [email protected] وكلمة المرور: tomster1 . يجب أن يربطك ذلك بعمق بصفحة تبدو كالتالي:

image

3) بعد تسجيل الدخول والوصول إلى الصفحة أعلاه ، ستحتاج إلى التحديث (حتى تبدأ في التنظيف من تلك الصفحة).

4) افتح مصحح أخطاء الكروم وقم بتشغيل ما يلي في وحدة التحكم:


(function() {
var room = 'MTpSb29tLDE5NzQ2MzAwMQ',
    wall = 'MTpSb29tLDE5NzQ2MzAwMSxXYWxsLDEwMDAx',
    wallitem = 'MTpXYWxsSXRlbSwxOTg0NjMwMDQ';

function promiseTimer(ms) {
  return new Ember.RSVP.Promise(function(resolve) {
    Ember.run.later(resolve, ms);
  });
}

function timedTransition() {
  return BC.router.transitionTo.apply(BC.router, arguments).then(function() {
    return promiseTimer(800);
  });
}

function takeActions() {
  var downloadUrl = window.wallitemRecord.get('downloadUrl');
  window.open(downloadUrl);
  promiseTimer(1400).then(function() {
    return timedTransition('wall.wallitem', room, wall, wallitem);
  }).then(function() {
    return timedTransition('wall', room, wall);
  }).then(function() {
    return timedTransition('wall.wallitem', room, wall, wallitem);
  }).then(function() {
    return timedTransition('wall', room, wall);
  }).then(function() {
    return timedTransition('wall.wallitem', room, wall, wallitem);
  }).then(function() {
    return timedTransition('wall', room, wall);
  }).then(function() {
    return timedTransition('wall.wallitem', room, wall, wallitem);
  }).then(function() {
    return timedTransition('wall', room, wall);
  }).then(function() {
    return timedTransition('wall.wallitem', room, wall, wallitem);
  }).then(function() {
    return timedTransition('wall', room, wall);
  });
}

BC.store.findRecord('wallitem', wallitem).then(function(wallitem) { window.wallitemRecord = wallitem; });
$('<button id="crash-reproduce">Crash Reproduce</button>').appendTo('.top-right-nav');
$('#crash-reproduce').on('click', takeActions);
})();

5) اضبط Chrome Debugger على "إيقاف مؤقت عند اكتشاف الاستثناءات".

6) يجب أن يكون الكود المحقون قد أضاف زرًا في الزاوية اليمنى العليا. انقر فوق هذا الزر. أولاً ، سيتم فتح علامة تبويب جديدة وتشغيل ملف ليتم تنزيله ، ثم يجب فتح مربع حوار مشروط وإغلاقه عدة مرات. هذا النموذج هو في الواقع "قابل للتوجيه" لذا يجب عليك أيضًا ملاحظة تغيير المسار. عند الفتح الثاني أو الثالث للشروط ، يجب أن تضغط على الاستثناء. إذا لم يحدث ذلك ، فقم بتحديث المتصفح وحاول مرة أخرى (بدءًا من الخطوة 4).

image


سأعمل على الحصول على شفرة المصدر لك في هذه الأثناء. نحن نعمل على Google App Engine لذلك لا يزال يتعين عليك الاتصال بخادم سحابي ، ولكن يجب أن أكون قادرًا على ترتيبه حتى تتمكن من تشغيل تطبيق العميل محليًا (إنشاء وكيل لخادم سحابي).

أخيرًا ، أنا في حالة ركود الآن وسأظل حتى حوالي الساعة 4 مساءً بتوقيت شرق الولايات المتحدة. يسعدني أن أكون بطل الشاشة إذا لزم الأمر. سأكون متاحًا أيضًا طوال اليوم غدًا.

رهيبة خطوات repro!

أنا أدير الأعمال المنزلية حاليًا ، لكنني سأحاول التحقيق في وقت لاحق اليوم (أو صباح الغد).

stefanpenner شكرا جزيلا! سأكون متصلاً بالإنترنت طوال اليوم غدًا ويسعدني تقديم المساعدة إذا لزم الأمر. يمكنك أن تجدني في emberjs Slack. لقد أرسلت لك أيضًا رسالة بريد إلكتروني حول الوصول إلى شفرة المصدر الخاصة بنا (تم إرسال بريد إلكتروني إلى gmail المدرج في حساب github الخاص بك).

stefanpenner لمعلوماتك لقد قمت بتعديل الخطوات قليلاً. لقد اكتشفت أنه من المرجح أن تعيد إظهار المشكلة إذا كنت تستخدم قائمة "وضع البناء" في تطبيقنا. كل ما تغير هو عنوان URL في الخطوة 1 ، لقطة الشاشة أدناه الخطوة 2 ومقتطف الشفرة في الخطوة 4.

_ ردًا على السؤال أعلاه ، إذا كان هذا الإصدار v8 / Chrome فقط: _ فحص سجلاتنا ، ووجد 8 حالات ، جميعها Chrome (49/48) على Windows (7 و 10). للأسف ليس لدي المزيد من نقاط البيانات.

لقد كنت أحاول إعادة إنتاج هذا ولكن بدون حظ في Twiddle ومحليًا. لكن يبدو أنه خاص بالمساعدين ، لأن لدي تطبيقًا آخر قيد الإنتاج بدون مساعدين ولا يتعطل ، خذ هذا مع بعض الملح.

لقد أجريت بعض اختبارات القوة الغاشمة عن طريق إجبار التطبيق على التنقل بين المسارات ذهابًا وإيابًا وفي بعض الأحيان قد يحدث خطأ بعد 3 انتقالات ، وإلقاء الخطأ والتعافي منه مع الانتقال التالي وبعد التعافي يبدو أنه لم يتعطل مرة أخرى.

تحرير: لقد تركته يتنقل عبر 7 مسارات لمدة 300 مرة ، مع تأخير قدره 50 مللي ثانية بين الانتقالات ولن ينقطع أي شيء. تم إجراء 5 عمليات إعادة تحميل يدوية بعد ذلك وتحطمت عند التمهيد عند إجراء عرض أولي لـ "مسار الفهرس" حيث يوجد بعض المساعدين في النماذج.

لقد أجريت بعض اختبارات القوة الغاشمة عن طريق إجبار التطبيق على التنقل بين المسارات ذهابًا وإيابًا وفي بعض الأحيان قد يحدث خطأ بعد 3 انتقالات ، وإلقاء الخطأ والتعافي منه مع الانتقال التالي وبعد التعافي يبدو أنه لم يتعطل مرة أخرى.

هذا يصف تماما تجربتي.

في حالتنا ، نستخدم window.open لبدء تنزيل ملف ويبدو أن هذا الإجراء "يساعد" في زيادة الغطاء المحتمل لحدوث هذه المشكلة (ولكن قد يكون مضارًا). بالنسبة لي ، أحيانًا أحصل على قائمة وسيحدث ذلك 10 مرات من أصل 10 مرات بعد الانتقال الثالث أو الرابع. في أوقات أخرى ، لن يحدث مرة واحدة كل نصف ساعة.

workmanw لدي مجموعة من الأشياء "التي يبدو أنها" تساعد في إعادة إنتاجها ولكن في الواقع لم أتمكن من متابعة أي من "التلميحات" التي قدمها لي التطبيق. يبدو عشوائيًا تمامًا.

حاولت تعطل التطبيق الخاص بك أيضًا من خلال خطوات الاستنساخ الواردة هنا ، ولم يحدث.

stefanpenner لقد حاولت إضافة بعض "قطع لحم الخنزير" لوظيفة الجسم ، لا يبدو أنها تساعد أو فعلت شيئًا خاطئًا.

على أي حال ، أعتقد أن لدي طريقة لتحقيق ذلك في كثير من الأحيان. لقد أكدت الآن أنه دائمًا نفس المساعد:مما يعطلها في طلبي. سأستمر في الحفر.

حتى الآن ، تمكنت من الحصول على بعض سجلات وحدة التحكم عندما تعطل ، ليس فقط المالك * غير محدد ولكن اسم المساعد أيضًا غير محدد. لذلك هناك أكثر من شيء مفقود.

workmanw بعض الخطوات التي ساعدتني في تعطل تطبيقي كثيرًا:

  • قم بتشغيل تطبيقك محليًا باستخدام CLI ، وتعديل bower_components / ember / ember.prod.js
  • أضف سجلات وحدة التحكم قبل hasRegistration وبعده ، مثل هذا:
if (validateLazyHelperName(name, owner, env.hooks.keywords)) {
        var helperName = 'helper:' + name;
        console.log("Before", helperName, owner !== undefined, owner._lookupFactory !== undefined);
        if (owner.hasRegistration(helperName, options)) {
          console.log("After", helperName, owner !== undefined);
          console.log("After _lookupFactory", owner._lookupFactory !== undefined);
          helper = owner._lookupFactory(helperName, options);
        }
      }

قم بتشغيل ember s --prod
نتيجة هذا بالنسبة لي هي كما يلي ، عندما يتعطل:

Before helper:t true true
After undefined false
TypeError: Cannot read property '_lookupFactory' of undefined

أثناء تشغيل سجل وحدة التحكم الثانية ، يكون كل من helperName والمالك "غير معرّفين" بالفعل ومن الواضح أنه يتعطل في "After _lookupFactory" console.log.

تحرير: ضع في اعتبارك هذا المساعد: t مخصص ليس من ember-i18n.

آسف لإجراء 1+ لهذا ، ولكن لست متأكدًا مما إذا كنت سأشترك في التحديثات بمجرد "إبداء الإعجاب".

نفس الخطأ بالضبط ، فقط في بناء الإنتاج.

الكروم: 48.0.2564.116 ، 49.0.2623.87
ماك: 10.9.5

stefanpenner مع --nouse_inlining لا يبدو أنه يحدث. حاولت الركض مع nouse_inlining وبدونه عدة مرات ولم يتعطل أبدًا عند تعطيل التطعيم. عند تشغيل Chrome بدون أعلام ، يمكنني الحصول على 5 من أصل 7 عمليات إعادة تحميل للتعطل مع هذه المدونات من خلال تعليقي السابق. لا يزال يتعين علي معرفة كيفية جعل هذا قابلاً للتكرار على تطبيق Twiddle أو التجريبي.

لقد رأيت هذا منذ بداية فبراير (2.3 ، ثم 2.4) ، OSX و Windows ، Chrome فقط. أدت إزالة جميع مساعدي Em.Helper والمساعدون المخصصون إلى إيقاف ظهور الأخطاء (بالطبع).

لقد مر بعض الوقت منذ أن واجهت خطأ جعلني أزيل قبعة ورق الألمنيوم الخاصة بي.
_لست وحدك. الحقيقة توجد هناك._

نشاهد هذا أيضًا في سجلات الأخطاء لـ EmberObserver.com. الرنين لأنه قد يكون مفيدًا لأنه مفتوح المصدر https://github.com/emberobserver/client

أيضًا على Ember 2.4.1 ، يظهر في كل مسار في التطبيق ، على Chrome أو Chromium 48 على أنظمة التشغيل Windows 7 و 8.1 و 10 و OS X و Ubuntu.

typeoneerror fwiw ، أنا شخصياً سعيد جدًا بإبلاغ الأشخاص بأنهم يواجهون نفس الخطأ مع تقديم تفاصيل البيئة أيضًا.

لست متأكدًا من الذي من المفترض أن يتضرر بالضبط من مثل هذه التقارير: غمزة:

فتحت للتو خطأ V8 ، https://bugs.chromium.org/p/v8/issues/detail؟

آسف ، ما زلت لم أحصل على أي دورات لإلقاء نظرة أعمق ، وآمل قريبًا.

كان إعادة الإنتاج بالنسبة لي أصعب مما تم وصفه ، لكنني تمكنت من إعادة الإنتاج على إصدار حديث جدًا من إصدار Mac OS Chromium 51.0.2671.4 (64 بت)

لقد رأيت للتو هذا يحدث على Twiddle مع ember.prod.js build. Chrome 49.0.2623.87 (64 بت) ، OS X 10.11.3

Uncaught TypeError: Cannot read property '_lookupFactory' of undefined VM3158 ember.prod.js:11783

لا يزال الاستنساخ غير واضح ، بمجرد أن تكون لدي خطوات للتكاثر ، سأشارك Twiddle هنا.

raido قد يكون من المفيد تشغيل Chrome باستخدام --js-flags = "- يمكن التنبؤ بها" ، مما يؤدي إلى إيقاف تشغيل الميزات المختلفة المعروف أنها تسبب عدم التحديد (مثل أي شيء يتضمن سلاسل عمليات في الخلفية). يرجى إعلامي عندما تجد توبيخًا جيدًا!

: تادا: رائع! أستطيع أن أرى من سجلاتنا أن نصف دزينة أو نحو ذلك من الأشخاص تمكنوا من إعادة إنتاج هذا على إصدارات مختلفة من الكروم ، بما في ذلك 51.

krisselden أنا آسف لذلك. أعتقد في ردودي السابقة أنني أشرت إلى أنه لم يكن دائمًا قابلاً للتكرار ، لكن كان يجب أن أكون صريحًا بشأن ذلك في التعليق مع خطوات الاستنساخ. في بعض الأحيان يبدو أنه لا يحدث. لا تزال هناك متغيرات في اللعب هنا لا أفهمها تمامًا. إذا لم أتمكن من تحقيق ذلك بسهولة بعد محاولتين أو 3 محاولات ، فقد تساعد إعادة تشغيل الكروم.

stefanpenner لدي بعض الدورات الآن وقد أمضيت 6-8 ساعات في محاولة إعادة إنتاجها في لغز. إذا كانت لديك أي أفكار أو حدس ، فسأكون سعيدًا لاستكشافها. ليس لدي معرفة كافية بالمجال حول هذه المشكلة.

workmanwstefanpenner لدي نفس القضية مع المعرفة حول المشكلة برمتها ما يجري هنا. تعطلي الذي اعتاد أن يتعطل كثيرًا ، الآن نادرًا ما يحدث ولم يتغير شيء باستثناء Chrome مغلق وفتح عدة مرات (ربما غير ذي صلة). انه حقا مزعج

jakobkummerow لم أتمكن من تعطيل تطبيقي بعلامة - يمكن التنبؤ بها.

لقد كنت أحاول إنشاء اختبار قبول فاشل هنا: https://github.com/runspired/bug-13071

تم الالتزام بـ bower_components منذ استبدال ember.debug.js بـ ember.prod.js . لم يحالفني الحظ حتى الآن في إعادة الإنتاج ، لكنني على Chrome 47 الذي لم يظهر أعلاه في أي تقارير أخطاء.

runspired لقد جربت ذلك أيضًا باستخدام Twiddle ، لم يتعطل أبدًا أثناء الاختبارات ولكن في بعض الأحيان بعد الانتهاء من الاختبارات والتنقل يدويًا حوله.

العبث الذي كنت ألعب به https://ember-twiddle.com/7fdf923d89ea37095cf3

بمجرد أن تعطل الأمر ثلاث مرات على التوالي ، مثل كل انتقال انتهى برسالة _lookupFactory.

تحرير: تمكنت من التقاط مكدس من 3 أعطال من Twiddle على screencast ، اثنان منهم متماثلان ، واحد مختلف. https://www.dropbox.com/s/51uwx6zo1scs7il/bug-13071.mp4؟dl=1

من الصعب جدًا بالنسبة لي إعادة إنتاج هذه المشكلة بشكل موثوق ولكن المشتبه به الحالي هو هذا https://github.com/emberjs/ember.js/blob/cfed40154285501c19a60aef3c0f51c645c9d44d/packages/ember-runtime/lib/mixins/container_proxy.js#L11 -L119 إذا كان لدى أي شخص وقت أسهل في إعادة الإنتاج ، فسأسلم كتابة الأسماء المستعارة وأيضًا لا أقترب من الهدف الوكيل.

workmanw إذا

لقد ضربت هذا أيضًا لأول مرة في الإنتاج (وتذكرت رؤية هذه المناقشة على Twitter). Chrome 48.0.2564.116 و Ember 2.3.

دردش مع krisselden على Slack. نعم ، سأكون سعيدًا بتجربة العلاقات العامة. معدل التكاثر لدي حوالي 33٪ من الوقت (كثيرًا جدًا).

workmanw يمكنك تجربة ما سبق عن طريق استنساخ curl https://github.com/emberjs/ember.js/pull/13116.patch | git am وعمل npm run build واستخدام dist على أنه bower_components / ember

krisselden لسوء الحظ ، لا يبدو أن هذا يحدث فرقًا :(

لقد سحبت v2.4.2 ، وقمت بتطبيق التصحيح وقمت بإنشاء. تم نسخ ember.min.js إلى app/bower_components/ember/ember.debug.js . أزال الدليل tmp/ وأطلق الخادم. لقد أكدت أنه تم تطبيق التصحيح من خلال النظر في علامة تبويب المصادر.

في حالة رغبة شخص ما في إعادة التحقق ، فهذه هي التجزئة بعد التصحيح والإنشاء الخاص بي: MD5 (dist/ember.min.js) = 23ab1021bebdf170d21338fecf347937

سعيد لمواصلة تجربة الأفكار التي قد تكون لديكم.

workmanw استنادًا إلى التعليق الأخير على https://bugs.chromium.org/p/v8/issues/detail؟id=4839#c7 والنظر إلى الكود ، هل تستخدم البحث المساعد المحلي؟ أعتقد أنه تم تضمين _findHelper هنا https://github.com/emberjs/ember.js/blob/master/packages/ember-htmlbars/lib/system/lookup-helper.js#L62 عندما لم يسبق له أن رأى أن هذه الحالة صحيحة ، وعندما تنتقل إلى مسار يصبح صحيحًا فيه hasRegistration ، لا يوجد مالك للشفرة المضمنة.

تفكيري الحالي هو https://github.com/emberjs/ember.js/commit/8af7da67c4b1eab94a6adfc82c91af98dc3ee532 يؤدي إلى تشغيل الخطأ في الإصدار 8 وأن منع _findHelper من تضمين أو تسخين الفرع باستخدام مساعد محلي سيؤدي إلى حله حتى يتم إصلاح الخطأ في الإصدار 8.

krisselden إذا كان لديك أي شيء جاهز للاختبار ، يمكنني تجربته. معدل التكاثر الخاص بي هو نفسه معدلworkmanw .

workmanw هل يمكنك اختبار العلاقات العامة التي أجريتها بناءً على https://bugs.chromium.org/p/v8/issues/detail؟id=4839#c9 تعليق؟

العلاقات العامة https://github.com/emberjs/ember.js/pull/13118

مع هذا التغيير ، لم أتمكن من تعطيل تطبيقي. إذا عدت عن التغييرات ، فستبدأ على الفور في الانهيار.

: confetti_ball:: tada : لقد اختبرت العلاقات العامة لـ لا يبدو أن هناك حلا ناجحا. :ابتسامة:

تحرير: تم الاختبار مع Chrome 49 و Chrome 51.

لقد كنت أحاول متابعة السيناريوهات التي تم الإبلاغ عنها عن كثب ، لكنني أعتقد أن هذا الرمز موجود في Ember 2.3 أيضًا. هل يعاني Ember 2.3 أيضًا من هذه المشكلة؟

نعم ، يمكنني أن أؤكد أن Ember v2.3 يتأثر بهذا أيضًا.

حسنًا ، تم سحب https://github.com/emberjs/ember.js/issues/13118 إلى الفروع التجريبية والإصدار والإصدار 2-3. يجب أن تحصل قنوات الإصدار والقنوات التجريبية على تصميمات جديدة قريبًا (عبر Travis) ، يرجى النقر عليها لفترة من الوقت حتى نتمكن من تأكيد أنها تعمل بالفعل على إصلاح هذا ...

raidoworkmanw شكرا جزيلا لقضاء الكثير من الوقت إعادة إنتاج الأخطاء، والعمل مع الكروم على العثور على وإصلاح هذه المشكلة.
إنه أحد برامج Heisenbugs حيث انتظرت ، في محاولة لأكون مستخدمًا مسؤولاً لـ OSS ، لتقديم مشكلة لأكثر من شهر لأنني لم أتمكن من تكوين فكرة ثابتة / twiddle / bin / إلخ. لقد تحدت الكثير من المنطق لدرجة أنني اعتقدت أنه يجب أن يكون خطأي. في المرة القادمة سأكون أكثر استباقية وأقوم باختبار اتصال غرفة Slack لزملائي الضحايا.

عمل جيد كل شيء!

@ 2468ben أتساءل عما إذا كان ينبغي أن يكون لدينا علامة hesienbug / ربما vmbug؟

[تم التصحيح بواسطة # 13118]

:)

rwjblue لقد قمت بتحديث bower.json الخاص بي الآن لاستخدام "ember": "components/ember#9c3e5820" وسأرسله عبر دورة ضمان الجودة. سأخبرك إذا كانت هناك أية مشكلات منبثقة.

شكرا جزيلا!

لقد واجهنا أيضًا هذه المشكلة ويبدو أن هذا قد أصلحها. لقد كنت أقوم بتطويق موقعنا مقابل إنشاء ember#9c3e5820 لأكثر من ساعة الآن ولم أشاهد أي مشكلات.

تم إصدار الإصدار 2.4.3 مع إضافة العمل في https://github.com/emberjs/ember.js/pull/13118.

يا رجل ، الساعات التي أمضيتها في محاولة إعادة إنتاج / إصلاح هذا الخطأ قبل العثور على هذا الموضوع ... لاف. عمل جيد يا رفاق!

نقوم حاليًا بتشغيل تطبيق على [email protected] ونواجه هذه المشكلة بالضبط وفقًا لـ Sentry على الرغم من أن الكود يتضمن الحل البديل في https://github.com/emberjs/ember.js/pull/13118 😞

@ Turbo87 تم إصلاح هذه المشكلة أيضًا في Chrome أيضًا. لذلك يجب أن يكون هناك إصدار واحد أو إصدارين فقط من Chrome يمكن تشغيلهما في هذا.

هل أنت متأكد من أنها نفس المشكلة؟

workmanw نعم ، متأكد من أنها نفسها. يبدو أن بعض مستخدمينا ما زالوا يستخدمون إصدارات Chrome القديمة وفي الواقع بعض المتصفحات المشتقة (Sogou Explorer و Opera و Chromium و Dragon) تعرض سلوكًا مشابهًا وفقًا لسجلات Sentry الخاصة بنا

:(. أشعر بألمك. بعض عملائنا عبارة عن مؤسسات تقفل المستخدمين في إصدارات معينة من Chrome ولا تسمح لهم بالترقية مطلقًا.

من المحتمل أن هذه المشكلة عادت إلى الظهور بطريقة ما. أستطيع أن أقول على يقين 100٪ أنه في ذلك الوقت ، نجح هذا الحل في حل المشكلة بالنسبة لنا ( v2.4.3 ).

كذلك هنا.

@ Turbo87 هل لديك إصدارات محددة؟

  • كروم 49.0.2623
  • أوبرا 36.0.2130
  • الكروم 48.0.2564
  • Sogou Explorer 1.0.0 تحديث
  • كروم 48.0.2564
  • كروم 50.0.2632

يعد Chrome 49 هو الأكثر شيوعًا لسبب ما

@ Turbo87 هل وجدت طريقة للتغلب على هذه المشكلة؟

givanse قمنا بالترقية إلى Ember 2.12 الآن ولا يبدو أن لدينا هذه المشكلة بعد الآن

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات