Ember.js: Fehler nach dem Upgrade auf Ember 2.4

Erstellt am 9. MĂ€rz 2016  Â·  79Kommentare  Â·  Quelle: emberjs/ember.js

Dieser Fehler tritt erst auf, nachdem die App aktiv war und eine Weile ausgefĂŒhrt wurde, sodass der Benutzer zwischen mehreren verschiedenen Routen navigieren kann. Es ist sehr schwer zu reproduzieren, es scheint nach einer Weile "einfach zu passieren". Wir konnten es einige Male mit unserem Produktions-Build (ember.min.js) reproduzieren, aber niemals mit einem Debug-Build (ember.debug.js).

Hier ist der Stapel:

 "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)

Das scheint auf den Suchhelfer zurĂŒckzufĂŒhren zu sein. Die wenigen Male, bei denen ich das GlĂŒck hatte, dies an einem Haltepunkt zu erfassen, habe ich festgestellt, dass der minimierte Parameter owner undefiniert wird. Der Rest der env sieht korrekt aus. Sehen:

image
image

Ich weiß, dass es sehr wenig zu tun gibt. Gibt es zusĂ€tzliche Informationen zum Stack, die beim Debuggen hilfreich sein könnten, ohne eine einfache Möglichkeit zu finden, dies zu reproduzieren?

Bug

Hilfreichster Kommentar

v2.4.3 wurde mit der in https://github.com/emberjs/ember.js/pull/13118 hinzugefĂŒgten Problemumgehung veröffentlicht

Alle 79 Kommentare

Was noch ungerade mehr ist , dass man im letzten Screenshot sehen kann, gibt es var s = "helper:" + e; auf der Linie 8786 ... aber irgendwie auf der nĂ€chsten Zeile s ist nicht definiert. : verwirrt: Es ist fast so, als wĂŒrde der Stack kaputt gehen ... oder der Chrome-Debugger macht es einfach falsch.

Ich habe so etwas auch gesehen. Passiert selten und ich weiß nicht, wie ich mich fortpflanzen soll. Ich bin mir auch nicht sicher, ob es das Problem meiner App oder etwas anderes ist.

@raido ist dein Stack der gleiche wie meiner (dh der Fehler liegt bei _lookupFactory )? Bist du auf Ember 2.4.1? Haben Sie dieses Problem in frĂŒheren Versionen von Ember gesehen?

Wir haben ein Upgrade von Ember 2.2 => Ember 2.4 durchgefĂŒhrt und dieses Problem innerhalb weniger Tage in unseren Serverprotokollen ziemlich hĂ€ufig festgestellt.

: +1: habe das selbst gesehen und mich aus meinen Bugsnag-Protokollen verwirrt:

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    }

Wie Sie sagen, wie kann owner undefined in der Zeile 11782 wenn es die owner.hasRegistration der vorherigen Zeile ĂŒberschritten hat?

Ebenso nur in der Produktion gesehen, wenn es minimiert ist (oben stammt aus Sourcemaps).

Protokolle zeigen, dass wir es bisher nur auf Chrome gesehen haben.

@workmanw Ja, mein Fehler hÀngt auch mit _lookupFactory zusammen und wird im Stacktrace unter lookupHelper angezeigt.

Protokolle aus der Produktion wurden gerade mit v2.3.0 erstellt

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)

Ich kann dieses Problem in 2.4.2 bestÀtigen, da es manchmal in der Produktion und noch nicht in der Entwicklung zu sehen ist. Kann dies möglicherweise vom Glutinspektor verursacht werden?

FĂŒr weitere Informationen: Hatte dies noch nie auf 2.3.x und der Stack ist der gleiche (_lookupFactory)

BEARBEITEN: Ich kann bestÀtigen, dass dies kein Problem mit dem Glutinspektor ist. Ein Fehler ist aufgetreten, wÀhrend der Inspektor deaktiviert wurde.

BestÀtigter Fehler in 2.4.1 und 2.4.2. Passiert nur mit minimierten js

@jcbvm @ gdub22 Konnte einer von Ihnen es konsistent reproduzieren? Ich habe versucht, zumindest eine konsistente Reihe von Schritten in unserer App zu finden, in der Hoffnung, ein Glut-Twiddle zu bauen, aber ich hatte kein GlĂŒck.

Dies ist völlig anekdotisch und wahrscheinlich ein roter Hering, aber es scheint zu passieren, wenn versucht wird, einen Helfer zu rendern, dessen VorgÀngerkomponente mit dem Komponentenhelfer gerendert wurde ( {{component componentName}} ).

@workmanw Ebenso nicht in der Lage, konsistent zu reproduzieren, verwenden wir den {{component}} -Helfer hÀufig in unserer App.

@workmanw nicht 100% konsistent, aber ich glaube, ich habe es auf eine bestimmte Komponente

Uglify ĂŒbertrĂ€gt die obige Funktion auf:

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;
}

Beachten Sie, dass beide Eigenschaftszugriffe auf owner in einer einzigen Zeile zusammengefasst wurden. Ich vermute, dass der Absturz tatsÀchlich beim ersten Absturz auftritt und die Genauigkeit der Quellenkarte nicht hoch genug ist, um sie korrekt zu unterscheiden.

Bearbeitet, um hinzuzufĂŒgen: Ah, aber der Absturz ist definitiv fĂŒr _lookupFactory property , also muss meine Spekulation falsch sein. Neugieriger und neugieriger.

@ ef4 Vielleicht ... aber die wenigen Male, die ich diese Ausnahme im Debugger abgefangen habe, ist o (in Ihrem Snippet) undefiniert, aber r.owner ist ein gĂŒltiger EigentĂŒmer. TatsĂ€chlich kann ich r.owner.hasRegistration(s,n) && (r.owner._lookupFactory(s,n)); und die Klasse bekommen. Zugegeben, dies ist, nachdem Chrome eine abgefangene Ausnahme gebrochen hat ... der Debugger könnte sich also auch in einem irrefĂŒhrenden Zustand befinden.

@ ef4 yep es ist definitiv eine seltsame.

Könnte V8 es aus irgendeinem Grund optimieren? Wer weiß am meisten ĂŒber die dunklen KĂŒnste von V8, vielleicht @stefanpenner ?

Wenn der abstĂŒrzende Zeilencode lautet:

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

dann:

  1. o.hasRegistration(s,n) hat bereits einen wahrheitsgemĂ€ĂŸen Wert zurĂŒckgegeben. das heisst
  2. o ist weder null noch undefined ; deshalb
  3. Cannot read property '_lookupFactory' of undefined ist entweder falsch oder ein Fehler in Version 8

Vermisse ich etwas Offensichtliches?

Welche Version von Chrome wird fĂŒr Benutzer ausgefĂŒhrt, die dieses Problem reproduziert haben? Haben Sie es in Firefox, IE oder Safari reproduziert?

@ Wycats Ich sehe nichts Offensichtliches, was du vermisst. Dies sind die gleichen Schlussfolgerungen, zu denen ich gekommen bin. Wir haben dieses Problem nur bei Chrome (48) gesehen. Bei meinen Reproduktionstests habe ich 48.0.2564.116 verwendet. Ich persönlich habe Firefox, IE oder Safari nicht ausprobiert, aber ich werde sie ausprobieren und zurĂŒckmelden.

EDIT: Ich kann das Problem nicht so weit vereinfachen, dass ein Twiddle entsteht. Aber wenn es hilfreich wÀre, kann ich einen oder mehrere Fehler, die an einem Haltepunkt angehalten wurden, in die Warteschlange stellen und auf einen Screenhero springen, wenn jemand im Chrome-Debugger herumstöbern möchte. Manchmal kann ich es dreimal in einer Minute reproduzieren. Manchmal dauert es 20 Minuten oder lÀnger.

@ Wycats In Ordnung. Ich habe die letzte Stunde damit verbracht, Chrome, Safari und Firefox auszuprobieren. Ich konnte es mehrmals in Chrome reproduzieren und ĂŒberhaupt nicht in Safari und Firefox. Ich bin mir nicht sicher, ob dies schlĂŒssig ist, aber es deutet sicherlich immer mehr auf ein Chrome-spezifisches Problem hin.

Ich konnte es auch nicht reproduzieren. FĂŒr mich passiert es normalerweise, wenn die App startet. Das mehrmalige Neuladen der App stĂŒrzt wahrscheinlich ab, ist jedoch nicht konsistent. Es kann 5 Mal in nur wenigen Minuten abstĂŒrzen oder eine halbe Stunde dauern. Ich habe auf dem neuesten Chrome getestet.

@workmanw Ich wĂŒrde empfehlen, diese Funktion zu zwingen, in bestimmten Modi zu bleiben. Dies kann uns helfen, mehr ĂŒber das Problem herauszufinden. An diesem Punkt sollten wir auch unsere v8-Freunde anpingen. DafĂŒr ist jedoch wahrscheinlich eine Reproduktion (sogar eine vollstĂ€ndige App) erforderlich.

Um Funktionen in bestimmten Modi zu halten, können Sie Teile von Version 8 langsam deaktivieren und prĂŒfen, ob der Fehler aufhört. Dies wird uns helfen, der Grundursache nĂ€her zu kommen.

Zuerst wĂŒrde ich einfach das Inlining deaktivieren, indem ich Chromes v8 mit deaktiviertem Symbol ausfĂŒhre: --nouse_inlining (ich vermute, dies könnte ausreichen)

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

Versuchen Sie auf der anderen Seite, die Kurbelwelle insgesamt zu deaktivieren --crankshaft=false

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

@stefanpenner

Ich habe dies mit Chrome 48 (anstatt mit Kanarienvogel) getestet. Wenn Sie möchten, dass ich es mit Canary versuche, wĂŒrde ich es gerne tun.

Mit --nouse_inlining ich dieses Problem nicht reproduzieren.
Mit --crankshaft=false konnte ich dieses Problem reproduzieren.

An diesem Punkt sollten wir auch unsere v8-Freunde anpingen. DafĂŒr ist jedoch wahrscheinlich eine Reproduktion (sogar eine vollstĂ€ndige App) erforderlich.

Ich verstehe vollkommen. Ich habe ungefĂ€hr 4 Stunden damit verbracht, "vorwĂ€rts zu arbeiten" und ein Ember-Twiddle zu bauen, das dies reproduziert. Ich verstehe einfach nicht genug, was das vorhat. Jetzt werde ich mit unserer App "rĂŒckwĂ€rts arbeiten", um die Reproduktion zu vereinfachen, indem ich die Reproduktionsschritte reduziere und so viel wie möglich aus unserer App herausreiße.

Mit --nouse_inlining konnte ich dieses Problem nicht reproduzieren.

scheint erwartet zu werden, daher hÀngt es höchstwahrscheinlich mit Inlining-Fehlern zusammen.

Mit --crankshaft = false konnte ich dieses Problem reproduzieren.

Das ist vielleicht die falsche Flagge, ich kann mich nicht erinnern.

Ich verstehe vollkommen. Ich habe ungefĂ€hr 4 Stunden damit verbracht, "vorwĂ€rts zu arbeiten" und ein Ember-Twiddle zu bauen, das dies reproduziert. Ich verstehe einfach nicht genug, was das vorhat. Jetzt werde ich mit unserer App "rĂŒckwĂ€rts arbeiten", um die Reproduktion zu vereinfachen, indem ich die Reproduktionsschritte reduziere und so viel wie möglich aus unserer App herausreiße.

@workmanw Ist es möglich, die App (oder eine URL zur App)
Die RealitÀt ist, dass es schwierig sein kann, dies isoliert zu reproduzieren.

A: sadpanda: Workaround: Erzwingt, dass die Funktion den maximalen AST ĂŒberschreitet, der eingefĂŒgt werden kann. Dies sollte es Ihnen ermöglichen: Schiff:

Das EinfĂŒgen der folgenden Zeichenfolge in den Körper dieser Funktion sollte den Trick ausfĂŒhren (im Moment Ă€ndern sich diese Grenzwerte / Heuristiken im Laufe der Zeit).

"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 Wenn Sie auch Kanarienvogel einchecken können, wÀre das praktisch.

@stefanpenner

Wenn Sie die folgende Zeichenfolge in diese Funktion einfĂŒgen, sollte dies der Trick sein (im Moment können sich diese Überstunden Ă€ndern).

Ihr Wissen ĂŒber die Interna ĂŒberrascht mich immer wieder.

@workmanw ist es möglich, die App so wie sie ist mit Schritten zur Reproduktion zu teilen?

Ja, ich sollte in der Lage sein, dies zu erreichen. Wenn Sie mir ein wenig geben, werde ich einige unserer Anmeldeinformationen fĂŒr eine unserer Vorproduktionsumgebungen bereitstellen und die Daten vorbereiten. Ich könnte wahrscheinlich in Ordnung kommen, wenn nötig, die Quelle zu teilen, mĂŒsste das aber privat tun.

@workmanw Wenn Sie auch Kanarienvogel einchecken können, wÀre das praktisch.

Getan. Ich habe canary "version 51.0.2673.0 canary (64-bit)" ohne eines der Flags ĂŒberprĂŒft und konnte es leider immer noch reproduzieren.

Ich könnte wahrscheinlich in Ordnung kommen, wenn nötig, die Quelle zu teilen, mĂŒsste das aber privat tun.

Es wĂŒrde mir persönlich helfen, das Problem weiter zu reduzieren, obwohl es keine Garantien gibt. Ich wĂŒrde mehr oder weniger gerne Folgendes tun:

  • Bereiten Sie eine Reproduktion fĂŒr die V8-Leute vor
  • Entdecken Sie eine Zwischenlösung [BUGFIX]
  • Holen Sie sich einen V8-Bericht in (heute / dieses Wochenende)

Mit einer App vor mir (in der ich Code Ă€ndern und erkunden kann) ist es möglicherweise möglich, eine ordnungsgemĂ€ĂŸe Umgehung / Reproduktion zu finden.

BEARBEITEN: Die unten verlinkte Anwendung verwendet einen Glut-Build, der die Problemumgehung aus PR # 13118 enthĂ€lt. Es ist nicht mehr gĂŒltig fĂŒr die Reproduktion dieses Problems. Wenn jemand daran interessiert ist, dieses Problem mit unserer App zu reproduzieren, kontaktieren Sie mich und ich könnte dies wahrscheinlich bewirken.


@stefanpenner Also habe ich die Reproduktion eingefĂŒgt habe. Glauben Sie mir, sonst wĂ€re es ein Albtraum gewesen.

Dies ist immer noch nicht 100% reproduzierbar.

1) Besuchen Sie diese URL: https://qa-integration.batterii.com/#/community/MTpDb21tdW5pdHksOTAwMQ/room/MTpSb29tLDE5NzQ2MzAwMQ/wall/MTpSb29tLDE5NzQ2MzAwMSxXWx

2) Login mit E-Mail: [email protected] und Passwort: tomster1 . Das sollte Sie auf eine Seite verweisen, die so aussieht:

image

3) Nachdem Sie sich angemeldet haben und auf der obigen Seite gelandet sind, mĂŒssen Sie eine Aktualisierung durchfĂŒhren (damit Sie von dieser Seite aus sauber beginnen können).

4) Öffnen Sie Ihren Chrome-Debugger und fĂŒhren Sie Folgendes in der Konsole aus:


(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) Setzen Sie den Chrome-Debugger auf "Pause bei gefangenen Ausnahmen".

6) Der injizierte Code sollte eine SchaltflĂ€che in der oberen rechten Ecke hinzugefĂŒgt haben. Klicken Sie auf diese SchaltflĂ€che. Zuerst wird eine neue Registerkarte geöffnet und eine herunterzuladende Datei ausgelöst. Anschließend sollte ein modaler Dialog mehrmals geöffnet und geschlossen werden. Dieses Modal ist tatsĂ€chlich "routingfĂ€hig", daher sollten Sie auch beobachten, wie sich die Route Ă€ndert. Beim zweiten oder dritten Öffnen des Modals sollten Sie die Ausnahme treffen. Wenn dies nicht der Fall ist, aktualisieren Sie den Browser und versuchen Sie es erneut (beginnend mit Schritt 4).

image


Ich werde in der Zwischenzeit daran arbeiten, Ihnen den Quellcode zu besorgen. Wir arbeiten mit Google App Engine, sodass Sie immer noch eine Verbindung zu einem Cloud-Server herstellen mĂŒssen. Ich sollte dies jedoch so arrangieren können, dass Sie die Client-App lokal ausfĂŒhren können (Proxy fĂŒr einen Cloud-Server).

Schließlich bin ich jetzt locker und werde bis ca. 16 Uhr EST sein. Ich wĂŒrde gerne Screenhero, wenn nötig. Ich werde morgen auch den ganzen Tag verfĂŒgbar sein.

Tolle Reproschritte!

Ich erledige derzeit die Hausarbeit, werde aber versuchen, sie spĂ€ter heute (oder morgen frĂŒh) zu untersuchen.

@stefanpenner Vielen Dank! Ich bin morgen den ganzen Tag online und helfe bei Bedarf gerne weiter. Du kannst mich in der Glut finden. Ich habe Ihnen auch eine E-Mail ĂŒber den Zugriff auf unseren Quellcode gesendet (E-Mail an Ihr @gmail, das in Ihrem Github-Konto aufgefĂŒhrt ist).

@stefanpenner FYI Ich habe die Schritte leicht

_Antwort auf die obige Frage, wenn dies nur v8 / Chrome ist: _ ĂŒberprĂŒfte unsere Protokolle, fand 8 FĂ€lle, alle Chrome (49/48) unter Windows (7 und 10). Leider habe ich keine Datenpunkte mehr.

Ich habe versucht, dies zu reproduzieren, aber ohne GlĂŒck auf Twiddle und vor Ort. Aber es scheint spezifisch fĂŒr Helfer zu sein, weil ich eine andere App in der Produktion ohne Helfer habe und sie nicht abstĂŒrzt. Nehmen Sie diese mit etwas Salz.

Ich habe einige Brute-Force-Tests durchgefĂŒhrt, indem ich die Anwendung gezwungen habe, zwischen Routen hin und her zu navigieren. Manchmal trat nach drei ÜbergĂ€ngen ein Fehler auf, der den Fehler auslöste und beim nĂ€chsten Übergang behoben wurde. Nach der Wiederherstellung schien er nie wieder abzustĂŒrzen.

Bearbeiten: Ich habe es 300 Mal durch 7 Routen navigieren lassen, mit einer Verzögerung von 50 ms zwischen den ÜbergĂ€ngen und nichts wĂŒrde kaputt gehen. Habe danach 5 manuelle Neuladungen durchgefĂŒhrt und es stĂŒrzte beim Booten beim ersten "Index Route" -Rendering ab, wo sich einige Helfer in Vorlagen befinden.

Ich habe einige Brute-Force-Tests durchgefĂŒhrt, indem ich die Anwendung gezwungen habe, zwischen Routen hin und her zu navigieren. Manchmal trat nach drei ÜbergĂ€ngen ein Fehler auf, der den Fehler auslöste und beim nĂ€chsten Übergang behoben wurde. Nach der Wiederherstellung schien er nie wieder abzustĂŒrzen.

Dies beschreibt absolut meine Erfahrung.

In unserem Fall verwenden wir window.open , um einen Dateidownload auszulösen, und diese Aktion "scheint" dazu beizutragen, die Wahrscheinlichkeit zu erhöhen, dass dieses Problem auftritt (es könnte sich jedoch um einen roten Hering handeln). FĂŒr mich ist es manchmal eine Rolle, und es passiert 10 von 10 Mal nach dem 3. oder 4. Übergang. In anderen FĂ€llen wird es nicht einmal in einer halben Stunde passieren.

@workmanw Ich habe eine Reihe von "wahrscheinlichen" Dingen, die "zu reproduzieren scheinen", aber in Wirklichkeit konnte ich keinem der "Hinweise" folgen, die mir die Anwendung gegeben hat. Es scheint völlig zufÀllig.

Ich habe versucht, Ihre Anwendung auch durch die hier angegebenen Reproduktionsschritte zum Absturz zu bringen, ist aber nicht geschehen.

@stefanpenner Ich habe versucht, etwas "Schweinekotelett" zum Funktionskörper hinzuzufĂŒgen, schien nicht zu helfen oder ich habe etwas falsch gemacht.

Wie auch immer, ich denke, ich habe eine Möglichkeit, dies öfter zu erreichen. Ich habe jetzt bestÀtigt, dass es immer der gleiche Helfer ist:was es in meiner Anwendung zum Absturz bringt. Ich werde weiter graben.

Bisher habe ich es geschafft, einige Konsolenprotokolle abzurufen, wenn es abstĂŒrzt. Nicht nur der Besitzer * ist undefiniert, sondern auch helperName ist undefiniert. Es fehlt also mehr als eine Sache.

@workmanw Einige Schritte, die mir geholfen haben, meine App viel mehr zum Absturz zu bringen:

  • FĂŒhren Sie Ihre App lokal mit CLI aus und Ă€ndern Sie bower_components / ember / ember.prod.js
  • FĂŒgen Sie vor und nach hasRegistration Konsolenprotokolle hinzu:
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);
        }
      }

FĂŒhren Sie ember s --prod
Das Ergebnis ist fĂŒr mich wie folgt, wenn es abstĂŒrzt:

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

WĂ€hrend das zweite Konsolenprotokoll ausgefĂŒhrt wird, sind sowohl helperName als auch owner bereits "undefiniert" und es stĂŒrzt offensichtlich in der Datei "After _lookupFactory" console.log ab.

Bearbeiten: Denken Sie daran, dass dieser Helfer: t nicht aus Ember-i18n hergestellt wird.

Es tut mir leid, dies zu +1, aber ich bin mir nicht sicher, ob ich Updates mit nur einem "Daumen hoch-Emote" abonnieren kann.

Genau der gleiche Fehler, nur in Produktions-Builds.

Chrome: 48.0.2564.116, 49.0.2623.87
MacOS: 10.9.5

@stefanpenner mit --nouse_inlining scheint es nicht vorzukommen. Ich habe ein paar Mal versucht, mit und ohne nouse_inlining zu laufen, und es ist nie abgestĂŒrzt, wenn Inlining deaktiviert war. Wenn ich Chrome ohne Flags laufen lasse, könnte ich 5 von 7 Reloads zum Absturz bringen, wenn diese console.logs aus meinem vorherigen Kommentar vorhanden sind. Ich muss noch herausfinden, wie ich dies auf Twiddle oder der Demo-App reproduzierbar machen kann.

Ich habe dies seit Anfang Februar (2.3, dann 2.4) gesehen, OSX und Windows, nur Chrome. Durch das Entfernen aller benutzerdefinierten Em.Helper.helpers und Ember-Truth-Helfer wurde das Auftreten der Fehler (natĂŒrlich) verhindert.

Es ist schon eine Weile her, dass ich auf einen KĂ€fer gestoßen bin, der mich dazu brachte, meinen Alufolienhut abzubĂŒrsten.
_Du bist nicht allein. Die Wahrheit ist da draußen._

Dies wird auch in den Fehlerprotokollen fĂŒr EmberObserver.com angezeigt. Chiming in, weil es nĂŒtzlich sein könnte, da es Open Source https://github.com/emberobserver/client ist

Auch unter Ember 2.4.1, auf jeder Route in der Anwendung, unter Chrome oder Chromium 48 unter Windows 7, 8.1, 10, OS X und Ubuntu.

@typeoneerror fwiw Ich persönlich bin sehr froh, dass Leute berichten, dass sie denselben Fehler haben, und gleichzeitig Umgebungsdetails bereitstellen.

Ich bin mir nicht sicher, wer genau durch solche Berichte geschÀdigt werden soll: zwinker:

Ich habe gerade einen V8-Fehler geöffnet: https://bugs.chromium.org/p/v8/issues/detail?id=4839.

Tut mir leid, ich hatte noch keine Zyklen, um genauer hinzuschauen, hoffentlich bald.

Es war schwieriger fĂŒr mich zu reproduzieren als beschrieben, aber ich konnte auf einem sehr aktuellen Mac OS Chromium Build Version 51.0.2671.4 (64-Bit) reproduzieren.

Ich habe gerade gesehen, wie dies auf einem Twiddle mit ember.prod.js Build passiert. Chrome 49.0.2623.87 (64-Bit), OS X 10.11.3

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

Die Reproduktion ist noch unklar. Sobald ich Schritte fĂŒr die Reproduktion habe, werde ich das Twiddle hier teilen.

@raido Es kann hilfreich sein, Chrome mit --js-flags = "- vorhersehbar" auszufĂŒhren, wodurch verschiedene Funktionen deaktiviert werden, von denen bekannt ist, dass sie Unbestimmtheit verursachen (wie alles, was Hintergrundthreads betrifft). Bitte lassen Sie mich wissen, wenn Sie einen guten Repro finden!

: tada: Yay! Ich kann aus unseren Protokollen ein halbes Dutzend oder so ersehen, dass die Leute dies auf verschiedenen Chromversionen reproduzieren konnten, darunter 51.

@krisselden Das tut mir leid. Ich denke, in meinen vorherigen Antworten hatte ich impliziert, dass es nicht immer reproduzierbar war, aber ich hÀtte dies in dem Kommentar mit den Reproduktionsschritten explizit erwÀhnen sollen. Manchmal scheint es einfach nicht zu passieren. Hier sind noch Variablen im Spiel, die ich nicht vollstÀndig verstehe. Wenn es mir nach 2 oder 3 Versuchen nicht leicht fÀllt, kann ein Neustart von Chrome hilfreich sein.

@stefanpenner Ich habe jetzt einige Zyklen und ich habe 6-8 Stunden damit verbracht, es in einem Augenblick zu reproduzieren. Wenn Sie irgendwelche Gedanken oder Vermutungen haben, wĂŒrde ich sie gerne erkunden. Ich habe einfach nicht genug Domain-Wissen ĂŒber dieses Problem.

@workmanw @stefanpenner Ich habe das gleiche Problem mit dem Wissen ĂŒber das gesamte Problem, das hier vor sich geht. Mein Twiddle, das frĂŒher oft abstĂŒrzte, tut es jetzt selten und ich habe nichts geĂ€ndert, außer Chrome ein paar Mal geschlossen und geöffnet (wahrscheinlich ohne Bezug). Es ist wirklich nervig.

@jakobkummerow Ich konnte meine App mit --predictable flag nicht zum Absturz bringen.

Ich habe versucht, hier einen fehlgeschlagenen Abnahmetest zu erstellen: https://github.com/runspired/bug-13071

bower_components wird festgeschrieben, da ember.debug.js gegen ember.prod.js getauscht wurde. Bisher kein GlĂŒck bei der Reproduktion, aber ich bin auf Chrome 47, das oben in keinem Fehlerbericht aufgefĂŒhrt ist.

@runspired Ich habe das auch mit einem Twiddle versucht, es stĂŒrzte nie wĂ€hrend der Tests ab, aber manchmal nach Abschluss der Tests und manueller Navigation.

Das Twiddle, mit dem ich herumgespielt habe https://ember-twiddle.com/7fdf923d89ea37095cf3

Sobald ich es dreimal hintereinander zum Absturz gebracht habe, endete jeder Übergang mit einer _lookupFactory-Nachricht.

Bearbeiten: Ich habe es geschafft, Stackstraces von 3 AbstĂŒrzen vom Twiddle im Screencast abzufangen, 2 davon sind gleich, einer ist anders. https://www.dropbox.com/s/51uwx6zo1scs7il/bug-13071.mp4?dl=1

Es ist zu schwierig fĂŒr mich, dieses Problem zuverlĂ€ssig zu reproduzieren, aber mein aktueller VerdĂ€chtiger ist https://github.com/emberjs/ember.js/blob/cfed40154285501c19a60aef3c0f51c645c9d44d/packages/ember-runtime/lib/mixins/container_proxy.s -L119 Wenn es jemandem leichter fĂ€llt, zu reproduzieren, wĂŒrde ich die Aliase von Hand schreiben und auch nicht fĂŒr das Proxy-Ziel schließen.

@workmanw Wenn ich eine PR mache, um zu vermeiden, was meiner Meinung nach das Problem ist, können Sie es testen?

Ich habe dies auch gerade zum ersten Mal in der Produktion getroffen (und mich zufÀllig daran erinnert, diese Diskussion auf Twitter gesehen zu haben). Chrome 48.0.2564.116 und Ember 2.3.

Chatted w / @krisselden auf Slack. Ja, ich wĂŒrde gerne eine PR ausprobieren. Meine Reproduktionsrate betrĂ€gt ungefĂ€hr 33% der Zeit (also ziemlich hĂ€ufig).

@workmanw Sie können das oben curl https://github.com/emberjs/ember.js/pull/13116.patch | git am und npm run build ausfĂŒhren und dist als Ihre bower_components / ember verwenden

@krisselden Leider schien das keinen Unterschied zu machen :(

Ich habe v2.4.2 ausgecheckt, den Patch angewendet und einen Build erstellt. Kopiert ember.min.js in mein app/bower_components/ember/ember.debug.js . Das Verzeichnis tmp/ und der Server gestartet. Ich habe bestÀtigt, dass der Patch angewendet wurde, indem ich auf die Registerkarte Quellen geschaut habe.

Falls jemand es noch einmal ĂŒberprĂŒfen wollte, ist hier der Hash nach meinem Patch und Build: MD5 (dist/ember.min.js) = 23ab1021bebdf170d21338fecf347937

Gerne probieren wir Ihre Ideen weiter aus.

@workmanw Basierend auf dem letzten Kommentar auf https://bugs.chromium.org/p/v8/issues/detail?id=4839#c7 und wenn Sie sich den Code ansehen , verwenden Sie die lokale Hilfesuche? Ich vermute, dass _findHelper hier https://github.com/emberjs/ember.js/blob/master/packages/ember-htmlbars/lib/system/lookup-helper.js#L62 eingefĂŒgt wird, wenn Es hat noch nie gesehen, dass dieser Fall wahr ist, und wenn Sie zu einer Route navigieren, auf der er wahr wird hasRegistration der Inline-Code keinen EigentĂŒmer fĂŒr die Deopt.

Mein aktueller Gedanke ist https://github.com/emberjs/ember.js/commit/8af7da67c4b1eab94a6adfc82c91af98dc3ee532 löst den Fehler in Version 8 aus und das Verhindern, dass _findHelper den Zweig mit einem lokalen Helfer einbindet oder erwĂ€rmt, wĂŒrde ihn beheben, bis der Fehler behoben ist v8.

@krisselden Wenn Sie etwas zum Testen bereit haben, kann ich es ausprobieren. Meine Reproduktionsrate entspricht in etwa der von @workmanw .

@workmanw Können Sie die PR testen, die ich basierend auf dem Kommentar https://bugs.chromium.org/p/v8/issues/detail?id=4839#c9 erstellt habe ?

PR https://github.com/emberjs/ember.js/pull/13118

Mit dieser Änderung konnte ich meine App nicht zum Absturz bringen. Wenn ich die Änderungen rĂŒckgĂ€ngig mache, stĂŒrzt es ziemlich sofort ab.

: confetti_ball :: tada: Ich habe scheint eine erfolgreiche Abhilfe zu sein. :LĂ€cheln:

Bearbeiten: Getestet mit Chrome 49 und Chrome 51.

Ich habe versucht, die gemeldeten Szenarien genau zu verfolgen, aber ich glaube, dieser Code ist auch in Ember 2.3 enthalten. Leidet auch Ember 2.3 unter diesem Problem?

Ja, ich kann bestÀtigen, dass auch Ember v2.3 davon betroffen ist.

OK, https://github.com/emberjs/ember.js/issues/13118 in die Beta-, Release- und Release-2-3-Zweige gezogen. Die Release- und Beta-KanĂ€le sollten in KĂŒrze neue Builds erhalten (ĂŒber Travis). Bitte klicken Sie eine Weile darauf, damit wir bestĂ€tigen können, dass dies tatsĂ€chlich das Problem behebt ...

@workmanw @raido Vielen Dank, dass Sie so viel Zeit damit verbracht haben, den Fehler zu reproduzieren und mit Chromium zusammenzuarbeiten, um dieses Problem zu finden und zu beheben.
Es ist einer dieser Heisenbugs, bei denen ich, um ein verantwortungsbewusster OSS-Benutzer zu sein, ĂŒber einen Monat darauf gewartet habe, ein Problem einzureichen, weil ich keinen stabilen Kern / Twiddle / Bin / etc. Erstellen konnte. Es widersetzte sich einfach so viel Logik, dass ich dachte, es sei meine Schuld. Das nĂ€chste Mal werde ich proaktiver sein und den Slack-Raum fĂŒr andere Opfer anpingen.

Gute Arbeit alle!

@ 2468ben ich frage mich, ob wir vielleicht ein hesienbug / vielleicht vmbug label haben sollten?

[behoben durch # 13118]

:) :)

@rwjblue Ich habe meine bower.json jetzt aktualisiert, um "ember": "components/ember#9c3e5820" und ich werde sie durch den QS-Zyklus senden. Ich werde Sie wissen lassen, wenn Probleme auftauchen.

Vielen Dank!

Wir haben auch dieses Problem festgestellt und dies scheint es behoben zu haben. Ich habe unsere Website seit ĂŒber einer Stunde gegen den Build ember#9c3e5820 gehĂ€mmert und keine Probleme gesehen.

v2.4.3 wurde mit der in https://github.com/emberjs/ember.js/pull/13118 hinzugefĂŒgten Problemumgehung veröffentlicht

Oh Mann, die Stunden, die ich damit verbracht habe, diesen Fehler zu reproduzieren / zu beheben, bevor ich diesen Thread gefunden habe ... ugh. Gute Arbeit Jungs!

Wir fĂŒhren derzeit eine App fĂŒr [email protected] und treffen laut Sentry genau dieses Problem, obwohl der Code die Problemumgehung in https://github.com/emberjs/ember.js/pull/13118 enthĂ€lt 😞

@ Turbo87 Dieses Problem wurde auch in Chrome

Sind Sie sicher, dass es das gleiche Problem ist?

@workmanw ja, ziemlich sicher, dass es das gleiche ist. Anscheinend verwenden einige unserer Benutzer noch alte Chrome-Versionen, und tatsĂ€chlich zeigen einige abgeleitete Browser (Sogou Explorer, Opera, Chromium, Dragon) ein Ă€hnliches Verhalten gemĂ€ĂŸ unseren Sentry-Protokollen

:(. Ich fĂŒhle Ihren Schmerz. Einige unserer Kunden sind Unternehmen, die Benutzer an bestimmte Versionen von Chrome binden und sie niemals aktualisieren lassen.

Es ist möglich, dass dieses Problem auf irgendeine Weise wieder aufgetaucht ist. Ich kann mit 100% iger Sicherheit sagen, dass diese Problemumgehung zu diesem Zeitpunkt das Problem fĂŒr uns gelöst hat ( v2.4.3 ).

Hier gilt das gleiche.

@ Turbo87 hast du bestimmte versionen?

  • Chrome 49.0.2623
  • Opera 36.0.2130
  • Chrom 48.0.2564
  • Sogou Explorer 1.0
  • Chrome 48.0.2564
  • Chrome 50.0.2632

Chrome 49 ist aus irgendeinem Grund bei weitem das hÀufigste

@ Turbo87 hast du jemals einen Weg gefunden, um dieses Problem zu

@givanse Wir haben inzwischen ein Upgrade auf Ember 2.12 durchgefĂŒhrt und scheinen dieses Problem nicht mehr zu haben

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen