Ember.js: Ошибка после обновления до Ember 2.4

Созданный на 9 мар. 2016  ·  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

Я знаю, что этого очень мало. Если не найти простого способа воспроизвести это, есть ли какая-либо дополнительная информация о стеке, которая может помочь при отладке?

Самый полезный комментарий

v2.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: сам видел это и запутал меня до чертиков, из моих журналов ошибок:

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 в stacktrace.

Журналы производственной сборки, произошедшие только что с 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)

Я могу подтвердить эту проблему в версии 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, но я попробую их и сообщу.

РЕДАКТИРОВАТЬ: Я не могу упростить проблему до такой степени, чтобы вызвать тиддл. Но если это будет полезно, я могу поставить в очередь один или несколько сбоев, приостановленных в точке останова, и перейти на экранный герой, если кто-то захочет ковыряться в отладчике Chrome. Иногда я могу воспроизвести это 3 раза в минуту. Иногда на это уходит минут 20 и более.

@wycats Хорошо. Последний час я пробовал Chrome, Safari и Firefox. Мне удалось воспроизвести его несколько раз в Chrome, но не в Safari и Firefox. Я не уверен, что это окончательно, но это, безусловно, все больше и больше указывает на конкретную проблему Chrome.

Мне тоже не удалось воспроизвести это. Для меня это обычно происходит при загрузке приложения. Повторная загрузка приложения несколько раз, вероятно, приведет к его сбою, но это не согласованно. Он может выйти из строя 5 раз за считанные минуты или за полчаса. Я тестировал последнюю версию Chrome.

@workmanw Я бы порекомендовал заставить эту функцию оставаться в определенных режимах, это может помочь нам узнать больше о проблеме. В этот момент мы также должны пинговать наших друзей по v8. Но для этого, вероятно, потребуется репродукция (даже полное приложение).

Чтобы функции оставались в определенных режимах, вы можете медленно отключать части 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

@stefanpenner

Я тестировал это с помощью Chrome 48 (а не канарейки). Если вы хотите, чтобы я попробовал Canary, я был бы счастлив.

С --nouse_inlining мне не удалось воспроизвести эту проблему.
С --crankshaft=false я был в состоянии воспроизвести этот вопрос.

В этот момент мы также должны пинговать наших друзей по v8. Но для этого, вероятно, потребуется репродукция (даже полное приложение).

Я полностью понимаю. Я потратил около 4 часов, пытаясь «работать вперёд» и построить Ember-twiddle, который воспроизводит это. Я просто недостаточно понимаю, что для этого происходит. Итак, теперь я собираюсь начать «работать в обратном направлении», используя наше приложение, чтобы упростить воспроизведение, сократив количество шагов воспроизведения и вырвав из нашего приложения как можно больше.

С --nouse_inlining мне не удалось воспроизвести эту проблему.

кажется ожидаемым, поэтому, скорее всего, это связано с какой-либо ошибкой встраивания.

С --crankshaft = false мне удалось воспроизвести эту проблему.

это может быть неправильный флаг, я не могу вспомнить.

Я полностью понимаю. Я потратил около 4 часов, пытаясь «работать вперёд» и построить Ember-twiddle, который воспроизводит это. Я просто недостаточно понимаю, что для этого происходит. Итак, теперь я собираюсь начать «работать в обратном направлении», используя наше приложение, чтобы упростить воспроизведение, сократив количество шагов воспроизведения и вырвав из нашего приложения как можно больше.

@workmanw можно ли поделиться приложением (или URL-адресом приложения) как есть с шагами по воспроизведению?
На самом деле воспроизвести это изолированно может быть непросто.

A: 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, если еще можно проверить канарейку, это было бы удобно.

@stefanpenner

размещение следующей строки в этой функции должно помочь (прямо сейчас они могут измениться со временем)

Ваше знание внутреннего устройства не перестает меня удивлять.

@workmanw можно ли поделиться приложением как есть с шагами по воспроизведению?

Да, я смогу это сделать. Если вы дадите мне немного, я предоставлю некоторые учетные данные для одной из наших предпроизводственных сред и подготовлю данные. Я, вероятно, мог бы получить разрешение поделиться источником в случае необходимости, но мне пришлось бы сделать это в частном порядке.

@workmanw, если еще можно проверить канарейку, это было бы удобно.

Готово. Я проверил canary "версия 51.0.2673.0 canary (64-bit)" без какого-либо из флагов и, к сожалению, все еще смог воспроизвести его.

Я, вероятно, мог бы получить разрешение поделиться источником в случае необходимости, но мне пришлось бы сделать это в частном порядке.

Это помогло бы мне лично попытаться уменьшить проблему еще больше, хотя никаких гарантий. Я более или менее хотел бы сделать следующее:

  • подготовить репродукцию для людей V8
  • изучить временные решения [BUGFIX]
  • получить отчет V8 в (сегодня / в эти выходные)

С приложением передо мной (где я могу изменить код + исследовать) возможно обнаружение правильного обхода / воспроизведения.

РЕДАКТИРОВАТЬ: приложение, указанное ниже, использует сборку ember, которая содержит обходной путь из PR # 13118. Это больше не действует для воспроизведения этого выпуска. Если кто-то заинтересован в воспроизведении этой проблемы с помощью нашего приложения, свяжитесь со мной, и я, вероятно, смогу это сделать.


@stefanpenner Итак, я сократил воспроизведение, добавив код на страницу. Поверьте, иначе это был бы кошмар.

Это все еще не воспроизводимо на 100%.

1) Посетив этот URL: https://qa-integration.batterii.com/#/community/MTpDb21tdW5pdHksOTAwMQ/room/MTpSb29tLDE5NzQ2MzAwMQ/wall/MTpSb29tLDE5NzQ2MzAwMSxXwMDAxs

2) Войдите в систему с помощью электронной почты: [email protected] и пароля: tomster1 . Это должно углубить вас на страницу, которая выглядит так:

image

3) После входа в систему и перехода на указанную выше страницу вам нужно будет выполнить обновление (чтобы начать очистку с этой страницы).

4) Откройте отладчик Chrome и запустите в консоли следующее:


(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 значение «Приостановить при обнаружении исключений».

6) Введенный код должен был добавить кнопку в правом верхнем углу. Щелкните эту кнопку. Сначала откроется новая вкладка, и файл будет загружен, затем модальный диалог должен открываться и закрываться несколько раз. Этот модальный режим на самом деле «маршрутизируемый», поэтому вы также должны наблюдать за изменением маршрута. При втором или третьем открытии модального окна вы должны нажать на исключение. Если этого не происходит, обновите браузер и повторите попытку (начиная с шага 4).

image


А пока я буду работать над исходным кодом. Мы работаем на Google App Engine, поэтому вам все равно придется подключаться к облачному серверу, но я смогу организовать его так, чтобы вы могли запускать клиентское приложение локально (проксирование на облачный сервер).

Наконец, у меня сейчас слабина, и я буду примерно до 16:00 EST. Если понадобится, я с радостью сниму экранизацию. Я также буду доступен завтра весь день.

Потрясающие шаги воспроизведения!

В настоящее время я занимаюсь хозяйственными делами, но попытаюсь разобраться позже сегодня (или завтра утром).

@stefanpenner Большое спасибо! Завтра я буду в сети весь день и буду рад помочь в случае необходимости. Вы можете найти меня в локации emberjs. Я также отправил вам электронное письмо о получении доступа к нашему исходному коду (отправил по электронной почте ваш @gmail, указанный в вашей учетной записи github).

@stefanpenner FYI Я немного подправил шаги. Я обнаружил, что гораздо более вероятно, что вы воспроизведете проблему, если воспользуетесь списком "режима каменной кладки" нашего приложения. Все, что изменилось, - это URL-адрес на шаге 1, снимок экрана ниже шага 2 и фрагмент кода на шаге 4.

_В ответ на вопрос выше, если это только версия 8 / Chrome: _ проверил наши журналы, обнаружил 8 случаев, все Chrome (49/48) в Windows (7 и 10). К сожалению, у меня больше нет данных.

Я пытался воспроизвести это, но безуспешно на Twiddle и локально. Но, похоже, это относится к помощникам, потому что у меня есть другое приложение в производстве без помощников, и оно не дает сбоев, отнеситесь к этому с некоторой солью.

Я провел несколько тестов грубой силы, заставив приложение перемещаться между маршрутами вперед и назад, и иногда ошибка возникала после 3 переходов, выкидывала ошибку и восстанавливалась после следующего перехода, и после восстановления, казалось, никогда больше не сбой.

Изменить: я позволил ему пройти по 7 маршрутам 300 раз, с задержкой 50 мс между переходами, и ничего не сломалось. После этого было выполнено 5 перезагрузок вручную, и он вылетел при загрузке при выполнении начального рендеринга «индексного маршрута», где есть некоторые помощники в шаблонах.

Я провел несколько тестов грубой силы, заставив приложение перемещаться между маршрутами вперед и назад, и иногда ошибка возникала после 3 переходов, выкидывала ошибку и восстанавливалась после следующего перехода, и после восстановления, казалось, никогда больше не сбой.

Это полностью описывает мой опыт.

В нашем случае мы используем window.open для запуска загрузки файла, и это действие «кажется» помогает увеличить вероятность возникновения этой проблемы (но это может быть отвлекающим маневром). Что касается меня, иногда я попадаю в ловушку, и это случается 10 из 10 раз после третьего или четвертого перехода. В других случаях это происходит не раз в полчаса.

@workmanw У меня есть куча вещей типа "вероятного капюшона", которые "кажутся", чтобы помочь воспроизвести это, но на самом деле я не мог следовать ни одной из "подсказок", которые мне дало приложение. Это кажется совершенно случайным.

Я тоже пытался разбить ваше приложение по шагам воспроизведения, приведенным здесь, но этого не произошло.

@stefanpenner Я попытался добавить немного "свиной отбивной" в тело функции, похоже, это не помогло или я сделал что-то не так.

В любом случае, я думаю, что у меня есть способ, чтобы это происходило чаще. Теперь я подтвердил, что это всегда один и тот же помощник:что приводит к сбою в моем приложении. Я буду копать дальше.

До сих пор мне удалось получить несколько журналов консоли, и когда она вылетает, не только владелец * не определен, но и helperName также не определен. Так что не хватает более чем одной вещи.

@workmanw Несколько шагов, которые помогли мне добиться большего сбоя приложения:

  • Запустите приложение локально с помощью интерфейса командной строки, измените 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, и владелец уже "undefined", и, очевидно, происходит сбой в console.log "After _lookupFactory".

Изменить: имейте в виду, что этот помощник: t сделан не из ember-i18n.

Извините, что поставил +1, но не уверен, получу ли я подписку на обновления с помощью эмоции "палец вверх".

Точно такая же ошибка, только в производственных сборках.

Хром: 48.0.2564.116, 49.0.2623.87
MacOS: 10.9.5

@stefanpenner с --nouse_inlining похоже не происходит. Я пробовал работать с nouse_inlining и без него пару раз, и он никогда не падал, когда встраивание было отключено. Запустив Chrome без флагов, я мог получить 5 из 7 перезагрузок, чтобы вылететь с этими console.logs на месте из моего предыдущего комментария. Мне все еще нужно выяснить, как сделать это воспроизводимым в Twiddle или демонстрационном приложении.

Я наблюдаю это с начала февраля (2.3, затем 2.4), OSX и Windows, только Chrome. Удаление всех кастомных Em.Helper.helpers и ember-true-helpers остановило появление ошибок (конечно).

Прошло некоторое время с тех пор, как я столкнулся с ошибкой, которая заставила меня отряхнуть шляпу из фольги.
_Ты не одинок. Истина где-то там._

Также это видно в журналах ошибок для EmberObserver.com. Присоединяйтесь, потому что это может быть полезно, поскольку это открытый исходный код https://github.com/emberobserver/client

Также в Ember 2.4.1, который можно увидеть на каждом маршруте в приложении, в Chrome или Chromium 48 в Windows 7, 8.1, 10, OS X и Ubuntu.

@typeoneerror fwiw Лично я очень рад, что люди сообщают, что они сталкиваются с той же ошибкой, а также предоставляют подробную информацию о среде.

Я не уверен, кому именно должны причинить вред такие сообщения: wink:

Только что обнаружил ошибку V8, https://bugs.chromium.org/p/v8/issues/detail?id=4839.

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

Мне было труднее воспроизвести то, что было описано, но я смог воспроизвести на очень недавней сборке Mac OS Chromium версии 51.0.2671.4 (64-бит)

Я только что видел, как это происходит на Twiddle со сборкой ember.prod.js. 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 = "- predable", который отключает различные функции, которые, как известно, вызывают недетерминизм (например, все, что связано с фоновыми потоками). Пожалуйста, дайте мне знать, когда найдете хорошую репродукцию!

: tada: Ура! Я вижу из наших журналов, что около полдюжины человек смогли воспроизвести это на различных версиях Chrome, включая 51.

@krisselden Мне очень жаль. Я думаю, что в своих предыдущих ответах я имел в виду, что это не всегда воспроизводимо, но я должен был четко указать на это в комментарии с шагами воспроизведения. Иногда кажется, что этого просто не происходит. Здесь все еще есть переменные, которые я не совсем понимаю. Если после двух или трех попыток это не получится, может помочь перезапуск Chrome.

@stefanpenner Сейчас у меня есть несколько циклов, и я потратил 6-8 часов, пытаясь воспроизвести его в твиддле. Если у вас есть какие-то мысли или догадки, я буду рад их изучить. У меня просто недостаточно знаний об этой проблеме.

@workmanw @stefanpenner У меня такая же проблема со знанием всей проблемы, которая здесь происходит. Мой тиддл, который раньше часто падал, теперь редко, и у меня ничего не изменилось, кроме как пару раз закрывать и открывать Chrome (вероятно, не связанное с этим). Это действительно раздражает.

@jakobkummerow Мне не удалось вывести приложение из строя с флагом --predictable.

Я пытался создать здесь неудачный приемочный тест: https://github.com/runspired/bug-13071

bower_components фиксируется, поскольку ember.debug.js был заменен на ember.prod.js . Пока не повезло с воспроизведением, но я использую Chrome 47, который не упоминался выше ни в каких отчетах об ошибках.

@runspired Я тоже пробовал это с Twiddle, он никогда не падал во время тестов, но иногда после завершения тестов и ручной навигации по нему бывал.

Twiddle, с которым я играл https://ember-twiddle.com/7fdf923d89ea37095cf3

Как только я получил сбой три раза подряд, как будто каждый переход заканчивался сообщением _lookupFactory.

Изменить: мне удалось поймать стеки 3 сбоев из Twiddle на скринкасте, 2 из них одинаковые, один другой. 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_protainer_pro -L119, если кому-то легче воспроизводить, я бы вручную написал псевдонимы, а также не закрыл для цели прокси.

@workmanw, если я сделаю пиар, чтобы избежать того, что, по моему мнению, является проблемой, вы можете это проверить?

Я также впервые столкнулся с этим в производстве (и случайно вспомнил, что видел это обсуждение в Твиттере). 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 встроенный код не имеет владельца для deopt.

Моя текущая мысль: https://github.com/emberjs/ember.js/commit/8af7da67c4b1eab94a6adfc82c91af98dc3ee532 вызывает ошибку в версии 8, и предотвращение _findHelper встраивания или подогрева ветки с помощью локального помощника устранит ее, пока ошибка не будет исправлена ​​в v8.

@krisselden Если у вас есть что-нибудь готовое для тестирования, я могу попробовать. Моя скорость воспроизведения примерно такая же, как у @workmanw .

@workmanw Можете ли вы протестировать PR, который я сделал на основе https://bugs.chromium.org/p/v8/issues/detail?id=4839#c9 комментария?

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

С этим изменением я не смог завершить работу моего приложения. Если я верну изменения, он практически сразу же начнет вылетать.

: confetti_ball:: tada: Я тестировал PR @raido и не могу воспроизвести проблему. Это действительно кажется успешным обходной путь. :улыбка:

Изменить: протестировано с Chrome 49 и Chrome 51.

Я пытался внимательно следить за описанными сценариями, но считаю, что этот код также есть в Ember 2.3. Ember 2.3 также страдает от этой проблемы?

Да, я могу подтвердить, что Ember v2.3 тоже затронут этим.

Хорошо, переместил https://github.com/emberjs/ember.js/issues/13118 в ветки beta, release и release-2-3. Каналы выпуска и бета-версии должны получить новые сборки в ближайшее время (через Трэвиса), пожалуйста, поработайте над этим некоторое время, чтобы мы могли подтвердить, что он действительно исправляет это ...

@workmanw @raido Большое спасибо за то, что вы потратили столько времени на воспроизведение ошибки, работая с Chromium, чтобы найти и исправить эту проблему.
Это один из тех багов Heisenbug, где, пытаясь быть ответственным пользователем OSS, я ждал больше месяца, чтобы сообщить о проблеме, потому что не мог придумать стабильную gist / twiddle / bin / и т. Д. Это просто противоречило такой логике, что я решил, что это моя вина. В следующий раз я буду более активным и пингую в Slack-комнату для других жертв.

Молодцы всем!

@ 2468ben, интересно, стоит ли нам иметь лейбл hesienbug / может быть vmbug?

[исправлено # 13118]

:)

@rwjblue Теперь я обновил свой bower.json, чтобы использовать "ember": "components/ember#9c3e5820" и я собираюсь отправить его через цикл контроля качества. Я дам вам знать, если возникнут какие-либо проблемы.

Большое спасибо!

Мы также столкнулись с этой проблемой, и, похоже, она решена. Я уже более часа сталкиваю наш сайт с сборкой ember#9c3e5820 и не видел никаких проблем.

v2.4.3 была выпущена с возможностью обхода добавленной в https://github.com/emberjs/ember.js/pull/13118.

О боже, часы, которые я потратил, пытаясь воспроизвести / исправить эту ошибку, прежде чем нашел эту ветку ... тьфу. Молодцы ребята!

в настоящее время мы запускаем приложение на [email protected] и, согласно Sentry, мы сталкиваемся именно с этой проблемой, хотя код включает обходной путь в https://github.com/emberjs/ember.js/pull/13118 😞

@ Turbo87 Эта проблема также была исправлена ​​в Chrome. Таким образом, должно быть только 1 или 2 версии 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
  • Хром 48.0.2564
  • Хром 50.0.2632

Chrome 49 по какой-то причине является самым распространенным

@ Turbo87 Вы когда-нибудь находили способ обойти эту проблему?

@givanse, мы обновились до Ember 2.12, и, похоже, эта проблема больше не возникает

Была ли эта страница полезной?
0 / 5 - 0 рейтинги