Ember.js: Error después de actualizar a Ember 2.4

Creado en 9 mar. 2016  ·  79Comentarios  ·  Fuente: emberjs/ember.js

Este error solo ocurre después de que la aplicación ha estado activa y ejecutándose durante un tiempo, lo que le da al usuario la oportunidad de navegar entre varias rutas diferentes. Es muy difícil de reproducir, parece que "simplemente sucede" después de un tiempo. Hemos podido reproducirlo varias veces usando nuestra compilación de producción (ember.min.js), pero nunca usando una compilación de depuración (ember.debug.js).

Aquí está la pila:

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

Eso parece apuntar al asistente de búsqueda . Las pocas veces que he tenido la suerte de detectar esto en un punto de interrupción, he observado que el parámetro owner minificado se vuelve indefinido. El resto de env parece correcto. Ver:

image
image

Sé que es muy poco para continuar. Aparte de encontrar una manera fácil de reproducir esto, ¿hay alguna información adicional sobre la pila que pueda ser útil para depurar esto?

Bug

Comentario más útil

v2.4.3 se ha lanzado con la solución agregada en https://github.com/emberjs/ember.js/pull/13118.

Todos 79 comentarios

Lo que es aún más extraño es que puede ver en la última captura de pantalla, hay var s = "helper:" + e; en la línea 8786 ... pero de alguna manera en la siguiente línea s no está definido. : confuso: Es casi como si la pila se estuviera estropeando ... o el depurador de Chrome simplemente se equivocara.

Yo también he visto algo como esto. Ocurre raras veces y no sé cómo reproducirme. Además, no estoy seguro si es un problema de mi aplicación o algo más.

@raido, ¿tu pila es la misma que la mía (es decir, la falla está en _lookupFactory )? ¿Estás en Ember 2.4.1? ¿Ha visto este problema en versiones anteriores de ember?

Actualizamos desde Ember 2.2 => Ember 2.4 y comenzamos a ver este problema bastante en los registros de nuestro servidor en unos pocos días.

: +1: vi esto yo mismo y me confundí muchísimo, de mis registros de errores:

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    }

Como usted dice, ¿cómo puede owner estar undefined en línea 11782 si ha pasado de owner.hasRegistration la línea anterior?

Asimismo, solo lo vi en producción cuando se minificó (lo anterior proviene de mapas de origen).

Los registros muestran que solo lo hemos visto en Chrome hasta ahora.

@workmanw Sí, mi error también está relacionado con _lookupFactory y se ve lookupHelper en stacktrace.

Registros de la compilación de producción, sucedió hace un momento con v2.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)

Puedo confirmar este problema en 2.4.2, viéndolo a veces en producción, pero aún no se ha visto en desarrollo. ¿Puede esto ser causado por el inspector de brasas?

Para obtener más información: nunca tuve esto en 2.3.xy la pila es la misma (_lookupFactory)

EDITAR: Puedo confirmar que esto no es un problema del inspector de brasas, se produjo un error mientras el inspector estaba deshabilitado.

Error confirmado en 2.4.1 y 2.4.2. Ocurre solo con js minificados

@jcbvm @ gdub22 ¿

Esto es completamente anecdótico y probablemente una pista falsa, pero parece suceder al intentar renderizar un ayudante que tiene un componente ancestro renderizado con el componente auxiliar ( {{component componentName}} ).

@workmanw Del {{component}} toda nuestra aplicación.

@workmanw no es 100% consistente, pero creo que lo

Uglify transpila la función anterior para:

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

Observe que ambos accesos de propiedad en owner se han compilado en una sola línea. Supongo que el bloqueo ocurre en el primero y la fidelidad del mapa de origen no es lo suficientemente alta como para distinguirlos correctamente.

Editado para agregar: Ah, pero el bloqueo es definitivamente por _lookupFactory property , por lo que mi especulación debe ser incorrecta. Más curioso y más curioso.

@ ef4 Quizás ... pero las pocas veces que he detectado esta excepción en el depurador, o (en su fragmento) no está definido, pero r.owner es un propietario válido. De hecho, puedo hacer r.owner.hasRegistration(s,n) && (r.owner._lookupFactory(s,n)); y obtener la clase. Por supuesto, esto es después de que Chrome se ha roto en una excepción detectada ... por lo que el depurador también podría estar en un estado engañoso.

@ ef4 sí, definitivamente es extraño.

¿V8 podría estar optimizándolo por alguna razón? ¿Quién sabe más sobre las artes oscuras de V8, @stefanpenner quizás?

Si el código de línea que falla es:

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

luego:

  1. o.hasRegistration(s,n) ya ha devuelto un valor verdadero; esto significa
  2. o no es ni null ni undefined ; por lo tanto
  3. Cannot read property '_lookupFactory' of undefined es incorrecto o es un error en v8

¿Me estoy perdiendo algo obvio?

Para las personas que han reproducido este problema, ¿qué versión de Chrome están ejecutando? ¿Lo ha reproducido en Firefox, IE o Safari?

@wycats No veo nada obvio que te

EDITAR: No puedo simplificar el problema hasta el punto de producir un giro. Pero si fuera útil, puedo poner en cola una o más fallas pausadas en un punto de interrupción y saltar sobre un héroe de pantalla si alguien quiere hurgar en el depurador de Chrome. A veces puedo reproducirlo 3 veces en un minuto. A veces se necesitan 20 minutos o más.

@wycats Está bien. Pasé la última hora probando Chrome, Safari y Firefox. Pude reproducirlo varias veces en Chrome y nada en Safari y Firefox. No estoy seguro de que esto sea concluyente, pero ciertamente apunta cada vez más hacia un problema específico de Chrome.

Tampoco he podido reproducirlo. Para mí, suele suceder cuando se inicia la aplicación. Recargar la aplicación varias veces probablemente la bloquee, pero no es consistente. Puede chocar 5 veces en solo minutos o tardar media hora. Probé en la última versión de Chrome.

@workmanw Recomendaría forzar esa función para permanecer en modos específicos, esto puede ayudarnos a averiguar más sobre el problema. En ese momento también deberíamos hacer ping a nuestros amigos v8. Pero para eso, es probable que se requiera una reproducción (incluso una aplicación completa).

Para mantener las funciones en modos específicos, puede deshabilitar lentamente partes de v8 y ver si el error se detiene. Esto nos ayudará a acercarnos a la causa raíz.

primero, simplemente deshabilitaría la inserción, ejecutando chromes v8 con él deshabilitado: --nouse_inlining (supongo que esto puede ser suficiente)

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

Por otro lado, intente deshabilitar el cigüeñal todos juntos --crankshaft=false

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

@stefanpenner

Probé esto usando Chrome 48 (en lugar de Canary). Si quieres que pruebe con Canary, estaré encantado de hacerlo.

Con --nouse_inlining no pude reproducir este problema.
Con --crankshaft=false I fue capaz de reproducir este problema.

En ese momento también deberíamos hacer ping a nuestros amigos v8. Pero para eso, es probable que se requiera una reproducción (incluso una aplicación completa).

Entiendo completamente. Pasé aproximadamente 4 horas tratando de "trabajar hacia adelante" y construir un Ember-twiddle que reproduzca esto. Simplemente no entiendo lo suficiente de lo que está pasando para hacer eso. Así que ahora voy a empezar a "trabajar al revés" usando nuestra aplicación para simplificar la reproducción reduciendo los pasos de reproducción y arrancando tanto de nuestra aplicación como pueda.

Con --nouse_inlining no pude reproducir este problema.

parece esperado, por lo que lo más probable es que esté relacionado con algún tipo de error de inserción.

Con --crankshaft = false pude reproducir este problema.

esta puede ser la bandera incorrecta, no puedo recordar.

Entiendo completamente. Pasé aproximadamente 4 horas tratando de "trabajar hacia adelante" y construir un Ember-twiddle que reproduzca esto. Simplemente no entiendo lo suficiente de lo que está pasando para hacer eso. Así que ahora voy a empezar a "trabajar al revés" usando nuestra aplicación para simplificar la reproducción reduciendo los pasos de reproducción y arrancando tanto de nuestra aplicación como pueda.

@workmanw ¿ es posible compartir la aplicación (o una URL a la aplicación) tal cual con los pasos para reproducir?
La realidad es que reproducir esto de forma aislada puede ser complicado.

R: sadpanda: solución alternativa, es forzar a la función a exceder el AST máximo que se puede insertar. Esto debería permitirle: enviar:

poner la siguiente cadena en el cuerpo de esa función , debería hacer el truco (en este momento, estos límites / heurísticas cambian con el tiempo)

"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, si también puedes registrar canary, sería útil.

@stefanpenner

poner la siguiente cadena en esa función, debería hacer el truco (ahora mismo, esto puede cambiar con el tiempo)

Su conocimiento de los aspectos internos nunca deja de sorprenderme.

@workmanw ¿ es posible compartir la aplicación como está con los pasos para reproducirla?

Sí, debería poder hacer que eso suceda. Si me da un poco, proporcionaré algunas credenciales para uno de nuestros entornos de preproducción y prepararé los datos. Probablemente podría estar bien para compartir la fuente si es necesario, pero tendría que hacerlo en privado.

@workmanw, si también puedes registrar canary, sería útil.

Hecho. Verifiqué canary "versión 51.0.2673.0 canary (64 bits)" sin ninguno de los indicadores y, desafortunadamente, aún pude reproducirlo.

Probablemente podría estar bien para compartir la fuente si es necesario, pero tendría que hacerlo en privado.

Me ayudaría personalmente a tratar de reducir aún más el problema, aunque no hay garantías. Más o menos me encantaría hacer lo siguiente:

  • preparar una reproducción para la gente de V8
  • explorar soluciones provisionales [BUGFIX]
  • obtenga un informe V8 en (hoy / este fin de semana)

Con una aplicación frente a mí (donde puedo cambiar el código + explorar), descubrir una solución alternativa / reproducción adecuada podría ser posible.

EDITAR: La aplicación vinculada a continuación utiliza una compilación de ember que contiene la solución alternativa de PR # 13118. Ya no es válido para la reproducción de este número. Si alguien está interesado en reproducir este problema usando nuestra aplicación, contácteme y probablemente podría hacer que eso suceda.


@stefanpenner Así que

Esto todavía no es 100% reproducible.

1) Visitando esta URL: https://qa-integration.batterii.com/#/community/MTpDb21tdW5pdHksOTAwMQ/room/MTpSb29tLDE5NzQ2MzAwMQ/wall/MTpSb29tLDE5NzQ2MzAwMSxXYWxsLDEwMDA

2) Inicie sesión con correo electrónico: [email protected] y contraseña: tomster1 . Eso debería enlazarlo a una página que se ve así:

image

3) Después de iniciar sesión y aterrizar en la página anterior, deberá actualizar (para que comience limpio desde esa página).

4) Abra su depurador de Chrome y ejecute lo siguiente en la consola:


(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) Configure el depurador de Chrome en "Pausar en excepciones detectadas".

6) El código inyectado debería haber agregado un botón en la esquina superior derecha. Haga clic en ese botón. Primero se abrirá una nueva pestaña y activará la descarga de un archivo, luego un cuadro de diálogo modal debería abrirse y cerrarse varias veces. Ese modal es en realidad "enrutable" por lo que también debe observar el cambio de ruta. En la segunda o tercera apertura del modal, debe presionar la excepción. Si esto no ocurre, actualice el navegador y vuelva a intentarlo (comenzando con el paso 4).

image


Mientras tanto, trabajaré para conseguirle el código fuente. Ejecutamos en Google App Engine, por lo que aún tendrá que conectarse a un servidor en la nube, pero debería poder organizarlo para que pueda ejecutar la aplicación cliente localmente (proxy a un servidor en la nube).

Por último, ahora estoy en holgura y lo estaré hasta las 4 p.m. EST. Estaría feliz de ser un héroe de pantalla si es necesario. También estaré disponible todo el día de mañana.

Increíbles pasos de reproducción!

Actualmente estoy realizando tareas, pero intentaré investigar más tarde hoy (o mañana por la mañana).

@stefanpenner ¡ Muchas gracias! Mañana estaré en línea todo el día y estaré feliz de ayudar si es necesario. Puedes encontrarme en la holgura de emberjs. También le envié un correo electrónico sobre cómo obtener acceso a nuestro código fuente ( envié por correo electrónico su

@stefanpenner FYI,

_En respuesta a la pregunta anterior, si se trata solo de v8 / Chrome: _ revisé nuestros registros, encontré 8 casos, todos Chrome (49/48) en Windows (7 y 10). Desafortunadamente, no tengo más puntos de datos.

He estado intentando reproducir esto pero sin suerte en Twiddle y localmente. Pero parece ser específico para ayudantes, porque tengo otra aplicación en producción sin ayudantes y no falla, tómate esto con algo de sal.

Hice algunas pruebas de fuerza bruta obligando a la aplicación a navegar entre rutas de ida y vuelta y, a veces, el error ocurría después de 3 transiciones, arrojaba el error y me recuperaba con la siguiente transición y, después de recuperarse, nunca parecía volver a bloquearse.

Editar: Lo dejé navegar a través de 7 rutas 300 veces, con un retraso de 50 ms entre las transiciones y nada se rompería. Hice 5 recargas manuales después de eso y se bloqueó al arrancar al hacer la representación inicial de "ruta de índice" donde hay algunos ayudantes en las plantillas.

Hice algunas pruebas de fuerza bruta obligando a la aplicación a navegar entre rutas de ida y vuelta y, a veces, el error ocurría después de 3 transiciones, arrojaba el error y me recuperaba con la siguiente transición y, después de recuperarse, nunca parecía volver a bloquearse.

Esto describe absolutamente mi experiencia.

En nuestro caso, usamos window.open para activar la descarga de un archivo y esta acción "parece" ayudar a aumentar la probabilidad de que ocurra este problema (pero podría ser una pista falsa). Para mí, a veces me pongo en racha y sucederá 10 de cada 10 veces después de la 3ª o 4ª transición. Otras veces, no sucederá ni una vez en media hora.

@workmanw Tengo un montón de cosas del tipo "probable" que "parecen" ayudar a reproducirlo, pero en realidad no he podido seguir ninguna de las "sugerencias" que la aplicación me ha dado. Parece completamente aleatorio.

Intenté bloquear su aplicación también mediante los pasos de reproducción que se dan aquí, pero no sucedió.

@stefanpenner Intenté agregar un poco de "chuleta de cerdo" para que funcione el cuerpo, no pareció ayudar o hice algo mal.

De todos modos, creo que tengo una forma de hacer que esto suceda con más frecuencia. Ahora he confirmado que siempre es el mismo ayudante:que lo bloquea en mi aplicación. Seguiré cavando.

Hasta ahora, logré obtener algunos registros de la consola y cuando falla, no solo el propietario * no está definido, sino que helperName también está indefinido. Así que falta más de una cosa.

@workmanw Algunos pasos que me ayudaron a que mi aplicación fallara mucho más:

  • Ejecute su aplicación localmente con CLI, modifique bower_components / ember / ember.prod.js
  • Agregue registros de consola antes de hasRegistration y después, así:
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);
        }
      }

Ejecutar ember s --prod
El resultado de esto para mí es el siguiente, cuando se bloquea:

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

A medida que se ejecuta el segundo registro de la consola, tanto helperName como owner ya están "indefinidos" y, obviamente, se bloquea en "After _lookupFactory" console.log.

Editar: tenga en cuenta este ayudante: t está hecho a medida, no de ember-i18n.

Lamento hacer +1 en esto, pero no estoy seguro de poder suscribirme a las actualizaciones con solo un "gesto de aprobación".

Exactamente el mismo error, solo en versiones de producción.

Cromo: 48.0.2564.116, 49.0.2623.87
MacOS: 10.9.5

@stefanpenner con --nouse_inlining no parece ocurrir. Intenté ejecutar con y sin nouse_inlining un par de veces y nunca se bloqueó cuando inlining estaba deshabilitado. Al ejecutar Chrome sin banderas, podría obtener 5 de 7 recargas para fallar con esos console.logs en su lugar de mi comentario anterior. Todavía tengo que descubrir cómo hacer que esto sea reproducible en Twiddle o en la aplicación de demostración.

He estado viendo esto desde principios de febrero (2.3, luego 2.4), OSX y Windows, solo Chrome. La eliminación de todos los Em.Helper.helpers personalizados y Ember-truth-helpers evitó que aparecieran los errores (por supuesto).

Ha pasado un tiempo desde que me encontré con un error que me hizo quitarme el sombrero de papel de aluminio.
_No estas solo. La verdad está ahí fuera._

También viendo esto en los registros de errores de EmberObserver.com. Interviniendo porque podría ser útil ya que es de código abierto https://github.com/emberobserver/client

También en Ember 2.4.1, visto en todas las rutas de la aplicación, en Chrome o Chromium 48 en Windows 7, 8.1, 10, OS X y Ubuntu.

@typeoneerror fwiw Personalmente, estoy muy feliz de que las personas informen que experimentan el mismo error al mismo tiempo que brindan detalles del entorno.

No estoy seguro de quién exactamente se supone que resultará perjudicado por tales informes: guiño:

Acabo de abrir un error de V8, https://bugs.chromium.org/p/v8/issues/detail?id=4839.

Lo siento, todavía no he tenido ciclos para echar un vistazo más profundo, con suerte pronto.

Fue más difícil de reproducir para mí de lo que se describió, pero pude reproducirlo en una versión muy reciente de Mac OS Chromium build 51.0.2671.4 (64 bits)

Acabo de ver esto sucediendo en un Twiddle con la compilación ember.prod.js. Chrome 49.0.2623.87 (64 bits), OS X 10.11.3

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

La reproducción aún no está clara, una vez que tenga los pasos para la reproducción, compartiré el Twiddle aquí.

@raido Puede ser útil ejecutar Chrome con --js-flags = "- predetable", que desactiva varias funciones que se sabe que causan indeterminismo (como cualquier cosa que involucre hilos en segundo plano). ¡Avísame cuando encuentres una buena reproducción!

: tada: ¡Yay! Puedo ver en nuestros registros que media docena de personas pudieron reproducir esto en varias versiones de Chrome, incluida la 51.

@krisselden Lo siento por eso. Creo que en mis respuestas anteriores había dado a entender que no siempre era reproducible, pero debería haber sido explícito al respecto en el comentario con los pasos de reproducción. A veces parece que simplemente no sucede. Aquí todavía hay variables en juego que no entiendo completamente. Si no puedo lograr que suceda fácilmente después de 2 o 3 intentos, reiniciar Chrome puede ayudar.

@stefanpenner Ahora tengo algunos ciclos y he pasado de 6 a 8 horas tratando de reproducirlos en un giro. Si tienes pensamientos o corazonadas, estaré feliz de explorarlos. Simplemente no tengo suficiente conocimiento de dominio sobre este problema.

@workmanw @stefanpenner Tengo el mismo problema con el conocimiento sobre todo el problema que está sucediendo aquí. Mi twiddle que solía fallar a menudo, ahora rara vez lo hace y no he cambiado nada, excepto Chrome cerrado y abierto un par de veces (probablemente sin relación). Es realmente molesto.

@jakobkummerow No he podido bloquear mi aplicación con la bandera --predictable.

He estado intentando crear una prueba de aceptación fallida aquí: https://github.com/runspired/bug-13071

bower_components está comprometido ya que ember.debug.js se ha cambiado por ember.prod.js . No tuve suerte hasta ahora en la reproducción, pero estoy en Chrome 47, que no apareció en ningún informe de errores.

@runspired También lo intenté con un Twiddle, nunca se bloqueó durante las pruebas, pero a veces después de completar las pruebas y navegar manualmente por él lo haría.

El Twiddle con el que he estado jugando https://ember-twiddle.com/7fdf923d89ea37095cf3

Una vez que me bloqueé tres veces seguidas, como si cada transición terminara con el mensaje _lookupFactory.

Editar: Me las arreglé para capturar rastros de 3 bloqueos del Twiddle en screencast, 2 de ellos son iguales, uno es diferente. https://www.dropbox.com/s/51uwx6zo1scs7il/bug-13071.mp4?dl=1

Es demasiado difícil para mí reproducir este problema de manera confiable, pero mi sospechoso actual es https://github.com/emberjs/ember.js/blob/cfed40154285501c19a60aef3c0f51c645c9d44d/packages/ember-runtime/lib/mixins/container_proxy.js# -L119 si alguien tiene más facilidad para reproducir, escribiría a mano los alias y tampoco cerraría para el destino del proxy.

@workmanw, si hago un PR para evitar lo que creo que es el problema, ¿puedes probarlo?

También acabo de tocar esto por primera vez en producción (y recordé haber visto esta discusión en Twitter). Chrome 48.0.2564.116 y Ember 2.3.

Charlé con @krisselden en Slack. Sí, estaría feliz de probar un PR. Mi tasa de reproducción es aproximadamente el 33% del tiempo (con bastante frecuencia).

@workmanw puede probar lo anterior clonando el repositorio de ember y usando curl https://github.com/emberjs/ember.js/pull/13116.patch | git am y haciendo npm run build y usando dist como su bower_components / ember

@krisselden Desafortunadamente, eso no pareció marcar la diferencia :(

Revisé v2.4.2 , apliqué el parche e hice una compilación. Copiado ember.min.js a mi app/bower_components/ember/ember.debug.js . Se eliminó el directorio tmp/ y se activó el servidor. Confirmé que el parche se había aplicado mirando la pestaña de fuentes.

En caso de que alguien quisiera verificar, aquí está el hash después de mi parche y compilación: MD5 (dist/ember.min.js) = 23ab1021bebdf170d21338fecf347937

Feliz de seguir probando las ideas que pueda tener.

@workmanw basado en el último comentario en https://bugs.chromium.org/p/v8/issues/detail?id=4839#c7 y mirando el código, ¿estás usando la búsqueda de ayuda local? Supongo que _findHelper está incluido aquí https://github.com/emberjs/ember.js/blob/master/packages/ember-htmlbars/lib/system/lookup-helper.js#L62 cuando nunca ha visto que este caso sea cierto y cuando navega a una ruta donde se convierte en cierto hasRegistration el código en línea no tiene propietario para el deopt.

Mi pensamiento actual es https://github.com/emberjs/ember.js/commit/8af7da67c4b1eab94a6adfc82c91af98dc3ee532 está desencadenando el error en v8 y que evitar que _findHelper inserte o caliente la rama con un ayudante local lo resolvería hasta que se solucione el error en v8.

@krisselden Si tienes algo listo para probar, puedo probarlo. Mi tasa de reproducción es aproximadamente la misma que la de @workmanw .

@workmanw ¿Puedes probar el PR que hice basado en el comentario https://bugs.chromium.org/p/v8/issues/detail?id=4839#c9 ?

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

Con este cambio, no he podido bloquear mi aplicación. Si revierto los cambios, casi instantáneamente comienza a fallar.

: confetti_ball:: tada: Probé las relaciones públicas de no parece ser una solución exitosa. :sonreír:

Editar: probado con Chrome 49 y Chrome 51.

He estado tratando de seguir de cerca los escenarios informados, pero creo que este código también está en Ember 2.3. ¿Ember 2.3 también sufre este problema?

Sí, puedo confirmar que Ember v2.3 también se ve afectado por esto.

De acuerdo, sacó https://github.com/emberjs/ember.js/issues/13118 en las ramas beta, release y release-2-3. Los canales de lanzamiento y beta deberían obtener nuevas compilaciones en breve (a través de Travis), por favor, aplíquelo por un tiempo para que podamos confirmar que realmente soluciona esto ...

@workmanw @raido Muchas gracias por dedicar tanto tiempo a reproducir el error y trabajar con Chromium para encontrar y solucionar este problema.
Es uno de esos Heisenbugs donde, tratando de ser un usuario responsable de OSS, esperé para presentar un problema durante más de un mes porque no pude hacer una gist / twiddle / bin / etc estable. Simplemente desafió tanta lógica que pensé que debía ser mi culpa. La próxima vez seré más proactivo y haré ping en la sala de Slack en busca de otras víctimas.

Buen trabajo a todos!

@ 2468ben me pregunto si tal vez deberíamos tener una etiqueta hesienbug / tal vez vmbug.

[corregido por # 13118]

:)

@rwjblue He actualizado mi bower.json ahora para usar "ember": "components/ember#9c3e5820" y lo voy a enviar a través del ciclo de control de calidad. Te avisaré si surge algún problema.

¡Muchas gracias!

También hemos estado experimentando este problema y parece haberlo solucionado. He estado golpeando nuestro sitio contra la compilación ember#9c3e5820 durante más de una hora y no he visto ningún problema.

v2.4.3 se ha lanzado con la solución agregada en https://github.com/emberjs/ember.js/pull/13118.

Oh, hombre, las horas que pasé tratando de reproducir / corregir este error antes de encontrar este hilo ... uf. ¡Buen trabajo chicos!

actualmente estamos ejecutando una aplicación en [email protected] y estamos resolviendo este problema exacto según Sentry a pesar de que el código incluye la solución en https://github.com/emberjs/ember.js/pull/13118 😞

@ Turbo87 Este problema también se solucionó en Chrome. Por lo tanto, solo debería haber 1 o 2 versiones de Chrome que podrían ejecutar esto.

¿Estás seguro de que es el mismo problema?

@workmanw sí, bastante seguro de que es lo mismo. aparentemente, algunos de nuestros usuarios todavía están ejecutando versiones antiguas de Chrome y, de hecho, algunos navegadores derivados (Sogou Explorer, Opera, Chromium, Dragon) muestran un comportamiento similar según nuestros registros de Sentry

:(. Siento tu dolor. Algunos de nuestros clientes son empresas que bloquean a los usuarios en versiones específicas de Chrome y nunca los dejan actualizar.

Es posible que este problema resurgiera de alguna manera. Puedo decir con 100% de certeza que, en ese momento, esta solución nos resolvió el problema ( v2.4.3 ).

Igual que aquí.

@ Turbo87 ¿tienes versiones específicas?

  • Chrome 49.0.2623
  • Opera 36.0.2130
  • Cromo 48.0.2564
  • Explorador de Sogou 1.0
  • Chrome 48.0.2564
  • Chrome 50.0.2632

Chrome 49 es, con mucho, el más común por alguna razón

@ Turbo87 , ¿alguna vez encontró una forma de solucionar este problema?

@givanse ya hemos actualizado a Ember 2.12 y parece que ya no tenemos este problema

¿Fue útil esta página
0 / 5 - 0 calificaciones