Ember.js: 升级到Ember 2.4后出现错误

创建于 2016-03-09  ·  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条评论

更奇怪的是,您可以在上一个屏幕截图中看到,在第8786行上有var s = "helper:" + e; ...但不知何故在下一行s是未定义的。 :confused:这几乎就像是堆栈变得无聊...或者chrome调试器只是把它弄错了。

我也看到过类似的东西。 很少发生,我不知道如何繁殖。 我也不确定这是否是我的应用程序的问题或其他问题。

@raido是您的堆栈与我的堆栈相同(IE失败在_lookupFactory )吗? 您是否在Ember 2.4.1? 您是否在先前版本的余烬中看到此问题?

我们从Ember 2.2升级到了Ember 2.4,并在几天之内开始在我们的服务器日志中看到这个问题。

:+1:从我的bugsnag日志中自己看到了这个,并弄混了我。

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

正如你说,怎么能ownerundefined上线11782如果它有过去的owner.hasRegistration前行?

同样,只有在最小化时才在生产中看到它(上面来自sourcemaps)。

日志显示,到目前为止,我们仅在Chrome上看到过它。

@workmanw是的,我的错误也与_lookupFactory有关,请参见stacktrace中的lookupHelper。

从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错误或v8中的错误

我是否缺少明显的东西?

对于重现此问题的人,您正在运行什么版本的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我建议强迫该功能保持在特定模式下,这可能有助于我们找到有关此问题的更多信息。 在这一点上,我们还应该ping通我们的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能重现此问题。

在这一点上,我们还应该ping通我们的v8朋友。 但是为此,可能需要复制(甚至是完整的应用程序)。

我完全明白。 我花了大约4个小时来尝试“向前工作”,并建立一个重现此效果的Ember-tiddle。 我只是对执行该操作的了解不多。 因此,现在我将开始使用我们的应用程序“向后工作”,以通过减少复制步骤并尽可能地从我们的应用程序中删除来简化复制过程。

使用--nouse_inlining,我无法重现此问题。

似乎是预料之中的,所以它很可能与某种内联错误有关。

使用--crankshaft = false,我可以重现此问题。

这可能是错误的标志,我不记得了。

我完全明白。 我花了大约4个小时来尝试“向前工作”,并建立一个重现此效果的Ember-tiddle。 我只是对执行该操作的了解不多。 因此,现在我将开始使用我们的应用程序“向后工作”,以通过减少复制步骤并尽可能地从我们的应用程序中删除来简化复制过程。

@workmanw是否可以按
现实是,孤立地复制它可能很棘手。

A:sadpanda:解决方法是强制函数超过可以内联的最大AST。 这应该使您可以:ship:

将以下字符串放在该函数的主体中,应该可以解决问题(现在,这些限制/启发式方法会随着时间而改变)

"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如果您还可以入住金丝雀,那将很方便。

做完了我检查了金丝雀“版本51.0.2673.0金丝雀(64位)”,没有任何标志,但是不幸的是我仍然可以重现它。

如果需要的话,我可能可以共享源,但是必须私下进行。

尽管没有保证,这将帮助我个人尝试进一步减少问题。 我或多或少希望执行以下操作:

  • 为V8人群准备复制品
  • 探索临时的[BUGFIX]解决方案
  • 在(今天/这个周末)获得V8报告

使用我前面的应用(可以在其中更改代码并进行探索),可以发现适当的解决方法/复制方法。

编辑:下面链接的应用程序正在使用余烬的版本,其中包含PR#13118中的解决方法。 复制该问题不再有效。 如果有人有兴趣使用我们的应用程序重现此问题,请与我联系,我可能可以实现。


@stefanpenner因此,我确实通过在页面中注入一些代码来减少复制。 相信我,否则这将是一场噩梦。

这仍然不是100%可重复的。

1)访问此URL: https :

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上运行,因此您仍然必须连接到云服务器,但是我应该能够安排它,以便您可以在本地运行客户端应用程序(代理到云服务器)。

最后,我现在很懒,直到美国东部标准时间下午4点左右。 如果需要的话,我很乐意筛选。 我明天也有空。

很棒的再现步骤!

我目前正在做家务,但会在今天晚些时候(或明天早上)进行调查。

@stefanpenner非常感谢! 明天我会整天在线,如果需要的话,很乐意为您提供帮助。 您可以在emberjs闲暇中找到我。 我还向您发送了一封电子邮件,告知您可以访问我们的源代码(通过电子邮件将您的

@stefanpenner仅供参考,我确实略微调整了步骤。 我发现,如果您使用我们应用程序的“砌体模式”列表,则更有可能重现该问题。 所做的更改只是步骤1中的URL,步骤2下面的屏幕截图以及步骤4中的代码段。

_针对上述问题,如果这仅是v8 / Chrome:_检查了我们的日志,发现8种情况,所有Windows(7和10)上的Chrome(49/48)。 不幸的是我没有更多的数据点。

我一直在尝试重现这一点,但是在Twiddle和本地都没有运气。 但这似乎是专门针对助手的,因为我在生产中有另一个没有助手的应用程序,并且它也不会崩溃,因此请加点盐。

我通过强制应用程序在路由之间来回导航进行了一些蛮力测试,有时3次转换后会发生错误,然后在下次转换时抛出错误并从错误中恢复,恢复似乎再也不会崩溃。

编辑:我让它在7条路线中导航了300次,在过渡之间有50ms的延迟,没有任何中断。 之后进行5次手动重新加载,并且在执行初始“索引路由”渲染时在启动时崩溃,模板中有一些帮助程序。

我通过强制应用程序在路由之间来回导航进行了一些蛮力测试,有时3次转换后会发生错误,然后在下次转换时抛出错误并从错误中恢复,恢复似乎再也不会崩溃。

这绝对描述了我的经历。

在我们的例子中,我们使用window.open触发文件下载,并且此动作“似乎”有助于增加发生此问题的可能性(但可能会引起麻烦)。 对我来说,有时候我会上榜,在第3次或第4次过渡后,它会发生十分之十的事情。 在其他时间,它不会在半小时内发生一次。

@workmanw我有一堆“似乎是引擎盖”类型的东西,“看起来”可以帮助重现它,但实际上我无法遵循任何给我的“提示”应用程序。 看来完全是随机的。

我也尝试通过此处给出的复制步骤使您的应用程序崩溃,但没有发生。

@stefanpenner我尝试在功能主体上添加一些“猪排”,似乎没有帮助,或者我做错了什么。

无论如何,我认为我有办法使这种情况更经常发生。 我现在已经确认,它总是相同的帮助者:这使它在我的应用程序中崩溃。 我会继续挖掘。

到目前为止,当崩溃时,我设法使一些控制台注销,不仅所有者*未定义,而且helperName也未定义。 因此,不只一件事失踪了。

@workmanw一些有助于我使应用程序崩溃的步骤:

  • 使用CLI在本地运行应用程序,修改bower_components / ember / ember.prod.js
  • 在hasRegistration之前和之后添加控制台日志,如下所示:
if (validateLazyHelperName(name, owner, env.hooks.keywords)) {
        var helperName = 'helper:' + name;
        console.log("Before", helperName, owner !== undefined, owner._lookupFactory !== undefined);
        if (owner.hasRegistration(helperName, options)) {
          console.log("After", helperName, owner !== undefined);
          console.log("After _lookupFactory", owner._lookupFactory !== undefined);
          helper = owner._lookupFactory(helperName, options);
        }
      }

运行ember s --prod
当我崩溃时,它的结果如下:

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

在运行第二个控制台日志时,helperName和owner都已经“未定义”,并且显然会在“在_lookupFactory之后” console.log中崩溃。

编辑:请记住,此helper:t是不是从ember-i18n定制的。

很抱歉为此+1,但不确定我是否只用“竖起大拇指的表情”来订阅更新。

完全相同的错误,仅在生产版本中。

铬:48.0.2564.116,49.0.2623.87
MacOS:10.9.5

@stefanpenner--nouse_inlining似乎没有发生。 我尝试使用nouse_inlining和不使用nouse_inlining两次,并且在禁用内联时它从未崩溃。 在没有标志的情况下运行Chrome,我可以从我之前的评论中获得5次7次重新加载,以使这些console.logs崩溃。 我仍然必须弄清楚如何使它在Twiddle或演示应用程序上可重现。

自2月初(2.3,然后是2.4),OSX和Windows(仅限Chrome)以来,我一直在看到这种情况。 删除所有自定义Em.Helper.helpers和ember-truth-helpers可以阻止出现这些错误(当然)。

自从我遇到一个使我脱掉锡纸帽子的错误以来已经有一段时间了。
_你不是一个人。 真相就在那里。_

在EmberObserver.com的错误日志中也看到了这一点。 嵌入是因为它是开源的,因为它可能是有用的https://github.com/emberobserver/client

同样在Ember 2.4.1上,可以在应用程序的每条路径上,在Windows 7、8.1、10,OS X和Ubuntu的Chrome或Chromium 48上看到。

@typeoneerror结束语我个人非常高兴有人报告他们遇到相同的错误,同时还提供了环境详细信息。

我不确定这些报道究竟应该伤害谁:wink:

刚刚打开了一个V8错误, https ://bugs.chromium.org/p/v8/issues/detail?id

对不起,我还没有任何机会深究一下,希望很快。

对我来说,复制起来比描述的要难,但是我能够在最近的Mac OS Chromium版本51.0.2671.4(64位)上进行复制。

我刚刚看到这是在使用ember.prod.js构建的Twiddle中发生的。 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使用--js-flags =“-predictable”运行Chrome可能会有所帮助,该功能可以关闭导致不确定性的各种功能(例如涉及后台线程的任何功能)。 当您找到好的复制品时,请务必告诉我!

:tada:好的! 从我们的日志中可以看到,大约有六十个人能够在各种版本的chrome(包括51)上重现此内容。

@krisselden我对此感到抱歉。 我认为我在以前的答复中暗示它并不总是可复制的,但是我应该在带有复制步骤的评论中明确指出这一点。 有时似乎只是没有发生。 我还没有完全掌握其中的变量。 如果经过2或3次尝试后仍无法轻松实现,则重启chrome会有所帮助。

@stefanpenner我现在有一些周期,并且我花了6-8个小时试图在旋转中重现它。 如果您有任何想法或预感,我很乐于探索。 我只是没有足够的领域知识有关此问题。

@workmanw @stefanpenner我对这里发生的整个问题有相同的了解。 我以前经常崩溃的旋转开关,现在很少这样做了,除了关闭和打开Chrome两次(可能无关)外,我什么都没改变。 真烦人。

@jakobkummerow我无法使用--predictable标志使我的应用程序崩溃。

我一直在尝试在此处创建失败的验收测试: https :

bower_components因为致力于ember.debug.js已换为ember.prod.js 。 到目前为止,在复制方面没有任何运气,但我使用的是Chrome 47,该Chrome在任何错误报告中都没有出现。

@runspired我也用Twiddle尝试过,它在测试期间从未崩溃,但有时在完成测试并手动导航后会崩溃。

我一直在玩的小提琴https://ember-twiddle.com/7fdf923d89ea37095cf3

一旦我崩溃了,它连续崩溃了三次,就像每个过渡都以_lookupFactory消息结尾。

编辑:我成功地从屏幕录像中捕获了来自Twiddle的3次崩溃的stackstrace,其中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_proxy.js#L115 -L119如果任何人都可以更轻松地进行复制,那么我会手写别名,也不要为代理目标而关闭。

@workmanw如果我进行PR以避免我认为是问题所在,可以测试一下吗?

我也是在生产中第一次遇到这个问题(碰巧记得在Twitter上看到这个讨论)。 Chrome 48.0.2564.116和Ember 2.3。

在Slack上与@krisselden聊天。 是的,我很乐意尝试PR。 我的繁殖率大约是33%(非常频繁)。

@workmanw,您可以通过克隆余烬存储库并使用curl https://github.com/emberjs/ember.js/pull/13116.patch | git am并执行npm run build并使用dist作为bower_components / ember来测试上述内容

@krisselden不幸的是,这似乎没有什么不同:(

我签出了v2.4.2 ,应用了补丁并进行了构建。 已将ember.min.js复制到我的app/bower_components/ember/ember.debug.js 。 删除tmp/目录并启动服务器。 通过查看“源”选项卡,我确认已应用了补丁。

万一有人想再次检查,这里是我的补丁和构建之后的哈希: MD5 (dist/ember.min.js) = 23ab1021bebdf170d21338fecf347937

很高兴继续尝试您可能拥有的想法。

@workmanw基于对https://bugs.chromium.org/p/v8/issues/detail?id=4839#c7的最后评论,并查看代码,您是否在使用本地帮助程序查找? 我猜测_findHelper在这里被内联https://github.com/emberjs/ember.js/blob/master/packages/ember-htmlbars/lib/system/lookup-helper.js#L62它从未见过这种情况,因此当您导航到变为$$$ hasRegistration的路线时,内联代码没有取消选择的所有者。

我目前的想法是https://github.com/emberjs/ember.js/commit/8af7da67c4b1eab94a6adfc82c91af98dc3ee532触发v8中的错误,并且阻止_findHelper内联或使用本地帮助器预热分支将解决该问题,直到错误被修复为止v8。

@krisselden如果您有任何测试准备就绪,我可以尝试一下。 我的复制率大约与@workmanw相同。

@workmanw可以测试我基于https://bugs.chromium.org/p/v8/issues/detail?id=4839#c9评论所做的PR吗?

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

进行此更改后,我无法使我的应用程序崩溃。 如果我还原更改,它几乎立即开始崩溃。

confetti_ball::tada :我测试了似乎是一个成功的解决方法。 :微笑:

编辑:使用Chrome 49和Chrome 51测试。

我一直在尝试严格遵循所报告的方案,但是我相信这段代码也在Ember 2.3中。 Ember 2.3也会遇到这个问题吗?

是的,我可以确认Ember v2.3也受此影响。

好的,将https://github.com/emberjs/ember.js/issues/13118拉入beta,release和release-2-3分支。 发布和Beta频道应该很快就会有新的版本(通过Travis),请暂时敲一下它,以便我们确认它确实可以解决此问题。

@workmanw @raido非常感谢您花费这么多时间重现该错误,并与Chromium一起查找并修复了此问题。
这是Heisenbug的其中一个,尝试成为负责任的OSS用户,我等了一个多月才提出问题,因为我无法做出稳定的要旨/旋转/ bin / etc等。 它只是违反了太多逻辑,以至于我认为这一定是我的错。 下次,我将更加积极主动,为其他受害者探查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]上运行一个应用,尽管代码中包含https://github.com/emberjs/emberjs/ember.js/pull/13118中的解决方法,但根据Sentry,我们正在解决此确切问题😞

@ Turbo87这个问题也已在Chrome中修复。 因此,应该只能运行1或2个版本的Chrome。

您确定是同一问题吗?

@workmanw是的,可以肯定的是相同的。 显然,根据我们的Sentry日志,我们中的某些用户仍在使用旧版Chrome,实际上,某些派生的浏览器(Sogou Explorer,Opera,Chromium,Dragon)显示出类似的行为

:(。我感到您很痛苦。我们的一些客户是将用户锁定在特定版本的Chrome中并且从不让他们升级的企业。

这个问题有可能以某种方式浮出水面。 我可以100%肯定地说,当时,这种解决方法确实为我们解决了这个问题( v2.4.3 )。

同样在这里。

@ Turbo87您有特定版本吗?

  • 铬49.0.2623
  • 歌剧36.0.2130
  • 铬48.0.2564
  • 搜狗资源管理器1.0
  • 铬48.0.2564
  • 铬50.0.2632

由于某些原因,Chrome 49是迄今为止最常见的浏览器

@ Turbo87您是否找到解决此问题的方法?

@givanse我们现在已经升级到Ember 2.12,似乎不再有此问题

此页面是否有帮助?
0 / 5 - 0 等级