Ember.js: Kesalahan setelah meningkatkan ke Ember 2.4

Dibuat pada 9 Mar 2016  ·  79Komentar  ·  Sumber: emberjs/ember.js

Kesalahan ini hanya terjadi setelah aplikasi aktif dan berjalan beberapa saat, memberi pengguna kesempatan untuk menavigasi di antara beberapa rute berbeda. Sangat sulit untuk mereproduksi, tampaknya "terjadi begitu saja" setelah beberapa saat. Kami telah dapat mereproduksinya beberapa kali menggunakan build produksi kami (ember.min.js), tetapi tidak pernah menggunakan build debug (ember.debug.js).

Ini tumpukannya:

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

Itu sepertinya menunjuk kembali ke lookup-helper . Beberapa kali saya cukup beruntung untuk menangkap ini pada breakpoint, saya telah mengamati bahwa parameter owner diperkecil menjadi tidak terdefinisi. Sisa dari env terlihat benar. Lihat:

image
image

Saya tahu itu sangat sedikit untuk dilanjutkan. Karena tidak menemukan cara mudah untuk mereproduksi ini, apakah ada informasi tambahan tentang stack yang mungkin membantu dalam debugging ini?

Bug

Komentar yang paling membantu

v2.4.3 telah dirilis dengan perbaikan yang ditambahkan di https://github.com/emberjs/ember.js/pull/13118.

Semua 79 komentar

Yang lebih aneh adalah Anda dapat melihat di tangkapan layar terakhir, ada var s = "helper:" + e; di baris 8786 ... tetapi entah bagaimana di baris berikutnya s tidak ditentukan. : confused: Ini hampir seperti tumpukan macet ... atau debugger chrome hanya salah.

Saya telah melihat sesuatu seperti ini juga. Jarang terjadi dan saya tidak tahu cara bereproduksi. Juga saya tidak yakin apakah itu masalah aplikasi saya atau sesuatu yang lain.

@raido apakah tumpukan Anda sama dengan milik saya (yaitu kegagalannya pada _lookupFactory )? Apakah Anda menggunakan Ember 2.4.1? Pernahkah Anda melihat masalah ini di versi ember sebelumnya?

Kami meningkatkan dari Ember 2.2 => Ember 2.4 dan mulai melihat masalah ini cukup parah di log server kami dalam beberapa hari.

: +1: melihat ini sendiri dan bingung sih, dari log bugsnag saya:

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    }

Seperti yang Anda katakan, bagaimana owner menjadi undefined pada baris 11782 jika telah melewati owner.hasRegistration baris sebelumnya?

Demikian juga hanya melihatnya pada produksi ketika diperkecil (di atas berasal dari peta sumber).

Log menunjukkan bahwa sejauh ini kami hanya melihatnya di Chrome.

@workmanw Ya, kesalahan saya juga terkait dengan _lookupFactory dan melihat lookupHelper di stacktrace.

Log dari build produksi, baru saja terjadi dengan 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)

Saya dapat mengonfirmasi masalah ini di 2.4.2, melihatnya terkadang dalam produksi, belum terlihat dalam pengembangan. Mungkinkah ini disebabkan oleh inspektur ember?

Untuk info lebih lanjut: tidak pernah memiliki ini di 2.3.x dan tumpukannya sama (_lookupFactory)

EDIT: Saya dapat mengonfirmasi bahwa ini bukan masalah inspektur ember, kesalahan terjadi saat inspektur dinonaktifkan.

Bug yang dikonfirmasi di 2.4.1 dan 2.4.2. Hanya terjadi dengan js yang diperkecil

@jcbvm @ gdub22 Apakah salah satu dari Anda dapat mereproduksinya secara konsisten? Saya telah mencoba dan mencoba menemukan setidaknya serangkaian langkah yang konsisten di aplikasi kami dengan harapan dapat membuat ember-twiddle, tetapi saya tidak berhasil.

Ini benar-benar anekdot dan mungkin herring merah, tetapi tampaknya terjadi saat mencoba merender helper yang memiliki komponen leluhur yang dirender dengan helper komponen ( {{component componentName}} ).

@workmanw Juga tidak dapat mereproduksi secara konsisten, kami banyak menggunakan {{component}} helper di seluruh aplikasi kami.

@workmanw tidak 100% secara konsisten tetapi saya pikir saya mempersempitnya ke komponen tertentu yang kebetulan menggunakan pembantu komponen dalam templatnya sendiri.

Uglify mentransformasikan fungsi di atas ke:

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

Perhatikan bahwa kedua akses properti pada owner telah dikompilasi menjadi satu baris. Dugaan saya adalah bahwa crash benar-benar terjadi pada yang pertama, dan ketepatan peta sumber tidak cukup tinggi untuk membedakannya dengan benar.

Diedit untuk menambahkan: Ah, tapi kecelakaan itu pasti sebesar _lookupFactory property , jadi spekulasi saya pasti salah. Lebih penasaran dan penasaran.

@ ef4 Mungkin ... tetapi beberapa kali saya menemukan pengecualian ini di debugger, o (dalam cuplikan Anda) tidak ditentukan, tetapi r.owner adalah pemilik yang sah. Nyatanya, saya bisa mendapatkan r.owner.hasRegistration(s,n) && (r.owner._lookupFactory(s,n)); dan mendapatkan kelas. Memang ini terjadi setelah Chrome rusak pada pengecualian yang tertangkap ... jadi debugger juga bisa berada dalam keadaan yang menyesatkan.

@ ef4 ya itu pasti aneh.

Bisakah V8 mengoptimalkannya karena alasan tertentu? Siapa yang paling tahu tentang seni gelap V8, mungkin @stefanpenner ?

Jika kode baris yang mogok adalah:

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

kemudian:

  1. o.hasRegistration(s,n) telah mengembalikan nilai yang sebenarnya; ini berarti
  2. o bukan null atau undefined ; karena itu
  3. Cannot read property '_lookupFactory' of undefined bisa jadi salah atau bug di v8

Apakah saya melewatkan sesuatu yang jelas?

Untuk orang-orang yang telah mengulangi masalah ini, versi Chrome apa yang Anda jalankan? Sudahkah Anda memperbanyaknya di Firefox, IE, atau Safari?

@wycats Saya tidak melihat sesuatu yang jelas Anda hilang. Ini adalah kesimpulan yang sama dengan yang saya dapatkan. Kami hanya melihat masalah ini masuk di Chrome terbaru (48). Dalam pengujian reproduksi saya, saya menggunakan 48.0.2564.116. Saya pribadi tidak mencoba Firefox, IE atau Safari, tetapi saya akan mencobanya dan melaporkannya kembali.

EDIT: Saya tidak dapat menyederhanakan masalah ke titik menghasilkan twiddle. Tetapi jika itu akan membantu, saya dapat mengantrekan satu atau beberapa kegagalan yang dijeda pada breakpoint, dan melompat ke screenhero jika seseorang ingin melihat-lihat di chrome debugger. Kadang-kadang saya bisa memperbanyaknya 3 kali dalam satu menit. Terkadang butuh waktu 20 menit atau lebih.

@wycats Baiklah. Saya menghabiskan satu jam terakhir mencoba Chrome, Safari, dan Firefox. Saya dapat mereproduksinya beberapa kali di Chrome dan tidak sama sekali di Safari dan Firefox. Saya tidak yakin ini konklusif, tetapi tentu saja ini semakin mengarah ke masalah khusus Chrome.

Saya juga belum bisa mereproduksinya. Bagi saya itu biasanya terjadi ketika aplikasi melakukan booting. Memuat ulang aplikasi beberapa kali mungkin akan membuatnya crash, namun tidak konsisten. Ini mungkin macet 5 kali hanya dalam beberapa menit atau memakan waktu setengah jam. Saya menguji di Chrome terbaru.

@workmanw Saya akan merekomendasikan untuk memaksa fungsi itu tetap dalam mode tertentu, ini dapat membantu kami mengetahui lebih lanjut tentang masalah ini. Pada titik mana kita juga harus melakukan ping ke teman v8 kita. Tetapi untuk itu, reproduksi (bahkan aplikasi lengkap) kemungkinan akan diperlukan.

Untuk mempertahankan fungsi dalam mode tertentu, Anda dapat menonaktifkan bagian-bagian v8 secara perlahan, dan melihat apakah bug berhenti. Ini akan membantu kita lebih dekat dengan akar masalahnya.

pertama saya hanya akan menonaktifkan sebaris, dengan menjalankan chromes v8 dengan menonaktifkannya: --nouse_inlining (tebakan saya ini mungkin cukup)

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

Di sisi lain, coba nonaktifkan poros engkol semua --crankshaft=false

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

@tokopedia

Saya menguji ini menggunakan Chrome 48 (bukan canary). Jika Anda ingin saya mencoba dengan Canary, saya akan dengan senang hati.

Dengan --nouse_inlining saya tidak dapat mereproduksi masalah ini.
Dengan --crankshaft=false Saya bisa mereproduksi masalah ini.

Pada titik mana kita juga harus melakukan ping ke teman v8 kita. Tetapi untuk itu, reproduksi (bahkan aplikasi lengkap) kemungkinan akan diperlukan.

Saya sangat mengerti. Saya telah menghabiskan sekitar 4 jam mencoba untuk "bekerja ke depan" dan membangun sebuah Ember-twiddle yang mereproduksi ini. Saya hanya tidak cukup mengerti tentang apa yang terjadi untuk melakukan itu. Jadi sekarang saya akan mulai "bekerja mundur" menggunakan aplikasi kita untuk menyederhanakan reproduksi dengan mengurangi langkah-langkah reproduksi dan mencabut sebanyak mungkin aplikasi kita.

Dengan --nouse_inlining saya tidak dapat mereproduksi masalah ini.

sepertinya diharapkan, jadi kemungkinan besar terkait dengan bug inlining dari beberapa jenis.

Dengan --crankshaft = false saya dapat mereproduksi masalah ini.

ini mungkin bendera yang salah, saya tidak ingat.

Saya sangat mengerti. Saya telah menghabiskan sekitar 4 jam mencoba untuk "bekerja ke depan" dan membangun sebuah Ember-twiddle yang mereproduksi ini. Saya hanya tidak cukup mengerti tentang apa yang terjadi untuk melakukan itu. Jadi sekarang saya akan mulai "bekerja mundur" menggunakan aplikasi kita untuk menyederhanakan reproduksi dengan mengurangi langkah-langkah reproduksi dan mencabut sebanyak mungkin aplikasi kita.

@workmanw apakah mungkin untuk membagikan aplikasi (atau URL ke aplikasi) sebagaimana adanya dengan langkah-langkah untuk mereproduksi?
Kenyataannya, mereproduksi ini secara terpisah mungkin sulit.

A: sadpanda: work-around, adalah memaksa fungsi melebihi AST maks yang dapat disisipkan. Ini memungkinkan Anda untuk: mengirim:

meletakkan string berikut di badan fungsi itu, harus melakukan trik (sekarang, batas / heuristik ini berubah seiring waktu)

"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 jika Anda juga dapat memeriksa kenari, itu akan berguna.

@tokopedia

menempatkan string berikut dalam fungsi itu, harus melakukan trik (sekarang, ini dapat berubah seiring waktu)

Pengetahuan Anda tentang internal tidak pernah berhenti membuat saya takjub.

@workmanw apakah mungkin untuk membagikan aplikasi apa adanya dengan langkah-langkah untuk mereproduksi?

Ya, saya harus bisa mewujudkannya. Jika Anda memberi saya sedikit, saya akan memberikan beberapa kredensial ke salah satu lingkungan praproduksi kami dan mendapatkan data yang prima. Saya mungkin boleh membagikan sumbernya jika perlu, tetapi harus melakukannya secara pribadi.

@workmanw jika Anda juga dapat memeriksa kenari, itu akan berguna.

Selesai. Saya memeriksa canary "version 51.0.2673.0 canary (64-bit)" tanpa salah satu flag dan sayangnya saya masih bisa mereproduksinya.

Saya mungkin boleh membagikan sumbernya jika perlu, tetapi harus melakukannya secara pribadi.

Ini akan membantu saya secara pribadi mencoba dan mengurangi masalah lebih lanjut, meskipun tidak ada jaminan. Saya kurang lebih ingin melakukan hal berikut:

  • persiapkan reproduksi untuk orang-orang V8
  • jelajahi solusi sementara [BUGFIX]
  • dapatkan laporan V8 dalam (hari ini / akhir pekan ini)

Dengan aplikasi di depan saya (di mana saya dapat mengubah kode + menjelajahi) menemukan penyelesaian / reproduksi yang tepat mungkin dapat dilakukan.

EDIT: Aplikasi yang ditautkan di bawah ini menggunakan build ember yang berisi solusi dari PR # 13118. Ini tidak lagi valid untuk mereproduksi masalah ini. Jika ada yang tertarik untuk mereproduksi masalah ini menggunakan aplikasi kami, hubungi saya dan saya mungkin bisa mewujudkannya.


@stefanpenner Jadi saya mengurangi reproduksi dengan memasukkan beberapa kode ke dalam halaman. Percayalah, kalau tidak, itu akan menjadi mimpi buruk.

Ini masih belum 100% dapat direproduksi.

1) Mengunjungi URL ini: https://qa-integration.batterii.com/#/community/MTpDb21tdW5pdHksOTAwMQ/room/MTpSb29tLDE5NzQ2MzAwMQ/wall/MTpSb29tLDE5NzQ2MzAwMSxXYWxsLDEwMDAx

2) Login dengan email: [email protected] dan password: tomster1 . Itu akan menautkan Anda ke dalam halaman yang terlihat seperti ini:

image

3) Setelah masuk dan mendarat di halaman di atas, Anda harus menyegarkan (sehingga Anda mulai bersih dari halaman itu).

4) Buka debugger chrome Anda dan jalankan perintah berikut di konsol:


(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) Setel Chrome Debugger ke "Jeda di Pengecualian Tertangkap".

6) Kode yang disuntikkan seharusnya menambahkan tombol di sudut kanan atas. Klik tombol itu. Pertama, tab baru akan terbuka dan memicu file untuk diunduh, lalu dialog modal akan dibuka dan ditutup beberapa kali. Modal itu sebenarnya "dapat dirutekan" jadi Anda juga harus mengamati perubahan rute. Pada modal terbuka kedua atau ketiga, Anda harus menekan pengecualian. Jika ini tidak terjadi, segarkan browser dan coba lagi (dimulai dengan langkah 4).

image


Sementara itu, saya akan berusaha mendapatkan kode sumber untuk Anda. Kami berjalan di Google App Engine sehingga Anda masih harus terhubung ke server cloud, tetapi saya harus dapat mengaturnya sehingga Anda dapat menjalankan aplikasi klien secara lokal (melakukan proxy ke server cloud).

Terakhir, saya sedang lesu sekarang dan akan sampai sekitar jam 4 sore EST. Saya akan senang menjadi pahlawan layar jika perlu. Saya juga akan tersedia sepanjang hari besok.

Langkah repro yang luar biasa!

Saya sedang mengerjakan tugas saat ini, tetapi akan mencoba menyelidikinya nanti hari ini (atau besok pagi).

@stefanpenner Terima kasih banyak! Saya akan online sepanjang hari besok dan dengan senang hati membantu jika perlu. Anda dapat menemukan saya di kendur emberjs. Saya juga mengirimi Anda email tentang mendapatkan akses ke kode sumber kami (mengirim email ke @gmail Anda yang terdaftar di akun github Anda).

@stefanpenner FYI saya melakukan sedikit tweak langkah-langkahnya. Saya menemukan bahwa kemungkinan besar Anda akan mereproduksi masalah jika Anda menggunakan daftar "mode pasangan bata" aplikasi kita. Semua yang berubah adalah URL di langkah 1, tangkapan layar di bawah langkah 2 dan cuplikan kode di langkah 4.

_Menanggapi pertanyaan di atas, jika ini hanya v8 / Chrome: _ memeriksa log kami, menemukan 8 kasus, semua Chrome (49/48) di Windows (7 dan 10). Sayangnya saya tidak memiliki lebih banyak poin data.

Saya telah mencoba mereproduksi ini tetapi tidak berhasil di Twiddle dan secara lokal. Tetapi tampaknya khusus untuk pembantu, karena saya memiliki aplikasi lain dalam produksi tanpa pembantu dan tidak macet, ambil ini dengan sedikit garam.

Saya melakukan beberapa tes brute force dengan memaksa aplikasi untuk menavigasi antara rute bolak-balik dan terkadang bug akan terjadi setelah 3 transisi, membuang kesalahan dan memulihkannya dengan transisi berikutnya dan setelah pemulihan sepertinya tidak pernah crash lagi.

Sunting: Saya membiarkannya menavigasi melalui 7 rute sebanyak 300 kali, dengan penundaan 50ms antara transisi dan tidak ada yang akan rusak. Apakah 5 manual memuat ulang setelah itu dan itu macet saat boot ketika melakukan rendering "rute indeks" awal di mana beberapa pembantu dalam template.

Saya melakukan beberapa tes brute force dengan memaksa aplikasi untuk menavigasi antara rute bolak-balik dan terkadang bug akan terjadi setelah 3 transisi, membuang kesalahan dan memulihkannya dengan transisi berikutnya dan setelah pemulihan sepertinya tidak pernah crash lagi.

Ini benar-benar menggambarkan pengalaman saya.

Dalam kasus kami, kami menggunakan window.open untuk memicu pengunduhan file dan tindakan ini "tampaknya" membantu meningkatkan kemungkinan terjadinya masalah ini (tetapi ini bisa jadi masalah besar). Bagi saya, kadang-kadang saya berhasil dan itu akan terjadi 10 dari 10 kali setelah transisi ke-3 atau ke-4. Di lain waktu, itu tidak akan terjadi sekali dalam setengah jam.

@workmanw Saya memiliki banyak jenis "kemungkinan tudung" yang "tampaknya" membantu mereproduksinya, tetapi pada kenyataannya saya belum dapat mengikuti salah satu dari aplikasi "petunjuk" yang telah diberikan kepada saya. Sepertinya benar-benar acak.

Saya mencoba merusak aplikasi Anda juga dengan langkah-langkah reproduksi yang diberikan di sini, tidak terjadi.

@stefanpenner Saya mencoba menambahkan beberapa "daging babi" untuk fungsi tubuh, sepertinya tidak membantu atau saya melakukan sesuatu yang salah.

Bagaimanapun, saya pikir saya punya cara untuk membuat ini lebih sering terjadi. Sekarang saya telah mengkonfirmasi, bahwa itu selalu penolong yang sama:yang menyebabkan crash di aplikasi saya. Saya akan terus menggali.

Sejauh ini, saya berhasil mendapatkan beberapa log keluar konsol ketika crash, tidak hanya pemiliknya * tidak ditentukan tetapi helperName juga tidak ditentukan. Jadi ada lebih dari satu hal yang hilang.

@workmanw Beberapa langkah yang membantu saya lebih sering membuat aplikasi saya mogok:

  • Jalankan aplikasi Anda secara lokal dengan CLI, modifikasi bower_components / ember / ember.prod.js
  • Tambahkan log konsol sebelum dan sesudah hasRegistration, seperti ini:
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);
        }
      }

Jalankan ember s --prod
Hasil dari ini bagi saya adalah sebagai berikut, ketika macet:

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

Saat log konsol kedua berjalan, baik helperName dan pemilik sudah "tidak ditentukan" dan jelas macet di "Setelah _lookupFactory" console.log.

Edit: Ingatlah helper ini

Maaf memberi ini +1, tetapi tidak yakin apakah saya dapat berlangganan pembaruan hanya dengan "tanda jempol".

Error yang sama persis, hanya di build produksi.

Chrome: 48.0.2564.116, 49.0.2623.87
MacOS: 10.9.5

@stefanpenner dengan --nouse_inlining sepertinya tidak terjadi. Saya mencoba menjalankan dengan dan tanpa nouse_inlining beberapa kali dan tidak pernah macet saat inlining dinonaktifkan. Menjalankan Chrome tanpa bendera saya bisa mendapatkan 5 dari 7 memuat ulang untuk mogok dengan konsol tersebut. Log di tempat dari komentar saya sebelumnya. Saya masih harus memikirkan cara membuat ini dapat direproduksi di aplikasi Twiddle atau demo.

Saya telah melihat ini sejak awal Februari (2.3, lalu 2.4), OSX dan Windows, khusus Chrome. Menghapus semua Em.Helper.helpers khusus dan ember-truth-helpers akan menghentikan munculnya kesalahan (tentu saja).

Sudah lama sejak saya bertemu serangga yang membuat saya melepaskan topi kertas timah saya.
_Anda tidak sendiri. Kebenaran ada diluar sana._

Juga melihat ini di log kesalahan untuk EmberObserver.com. Menimpali karena mungkin berguna karena ini open source https://github.com/emberobserver/client

Juga di Ember 2.4.1, terlihat di setiap rute dalam aplikasi, di Chrome atau Chromium 48 di Windows 7, 8.1, 10, OS X, dan Ubuntu.

@typeoneerror fwiw Secara pribadi saya sangat senang jika orang-orang melaporkan bahwa mereka mengalami bug yang sama sambil juga memberikan detail lingkungan.

Saya tidak yakin siapa sebenarnya yang seharusnya dirugikan oleh laporan seperti itu: wink:

Baru saja membuka bug V8, https://bugs.chromium.org/p/v8/issues/detail?id=4839.

Maaf saya masih belum punya siklus untuk melihat lebih dalam, semoga segera.

Bagi saya lebih sulit untuk mereproduksi daripada yang dijelaskan, tetapi saya dapat mereproduksi pada Mac OS Chromium versi terbaru Versi 51.0.2671.4 (64-bit)

Saya baru saja melihat ini terjadi di Twiddle dengan build ember.prod.js. 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

Reproduksi masih belum jelas, setelah saya memiliki langkah-langkah untuk reproduksi saya akan membagikan Twiddle di sini.

@raido Mungkin membantu menjalankan Chrome dengan --js-flags = "- predictable", yang mematikan berbagai fitur yang diketahui menyebabkan ketidakpastian (seperti apa pun yang melibatkan utas latar belakang). Tolong beri tahu saya jika Anda menemukan repro yang bagus!

: tada: Yay! Saya dapat melihat dari log kami sekitar setengah lusin orang dapat mereproduksi ini di berbagai versi chrome, termasuk 51.

@krisselden Saya minta maaf tentang itu. Saya pikir dalam tanggapan saya sebelumnya, saya telah menyiratkan bahwa itu tidak selalu dapat direproduksi, tetapi saya seharusnya secara eksplisit tentang itu pada komentar dengan langkah-langkah reproduksi. Terkadang hal itu sepertinya tidak terjadi. Masih ada variabel yang berperan di sini yang tidak sepenuhnya saya pahami. Jika saya tidak dapat membuatnya mudah terjadi setelah 2 atau 3 kali percobaan, memulai ulang chrome dapat membantu.

@stefanpenner Saya memiliki beberapa siklus sekarang dan saya telah menghabiskan 6-8 jam mencoba mereproduksinya dengan cepat. Jika Anda memiliki pemikiran atau firasat, saya akan dengan senang hati menjelajahinya. Saya hanya tidak memiliki pengetahuan domain yang cukup tentang masalah ini.

@workmanw @stefanpenner Saya memiliki masalah yang sama dengan pengetahuan tentang seluruh masalah yang terjadi di sini. Twiddle saya yang dulu sering macet, sekarang jarang dan saya tidak ada yang berubah kecuali menutup dan membuka Chrome beberapa kali (mungkin tidak terkait). Ini sangat mengganggu.

@jakobkummerow Saya belum bisa merusak aplikasi saya dengan --panji yang dapat diprediksi.

Saya telah mencoba membuat tes penerimaan yang gagal di sini: https://github.com/runspired/bug-13071

bower_components dilakukan sejak ember.debug.js telah ditukar dengan ember.prod.js . Sejauh ini tidak berhasil mereproduksi, tapi saya menggunakan Chrome 47 yang tidak muncul di atas dalam laporan bug apa pun.

@runspired Saya telah mencobanya juga dengan Twiddle, tidak pernah crash selama tes tetapi kadang-kadang setelah menyelesaikan tes dan secara manual menavigasi sekitarnya.

Twiddle yang saya mainkan dengan https://ember-twiddle.com/7fdf923d89ea37095cf3

Setelah saya mendapatkannya macet tiga kali berturut-turut, seperti setiap transisi diakhiri dengan pesan _lookupFactory.

Sunting: Saya berhasil menangkap stackstraces dari 3 crash dari Twiddle di screencast, 2 di antaranya sama, satu berbeda. https://www.dropbox.com/s/51uwx6zo1scs7il/bug-13071.mp4?dl=1

Terlalu sulit bagi saya untuk mereproduksi masalah ini dengan andal, tetapi tersangka saya saat ini adalah https://github.com/emberjs/ember.js/blob/cfed40154285501c19a60aef3c0f51c645c9d44d/packages/ember-runtime/lib/mixins/container_proxy.js#L115 -L119 jika ada yang memiliki waktu lebih mudah untuk mereproduksi, saya akan menulis alias dan juga tidak menutup untuk target proxy.

@workmanw jika saya melakukan PR untuk menghindari apa yang menurut saya masalahnya, dapatkah Anda mengujinya?

Saya juga baru saja menemukan ini untuk pertama kalinya dalam produksi (dan kebetulan ingat melihat diskusi ini di Twitter). Chrome 48.0.2564.116 dan Ember 2.3.

Mengobrol dengan @krisselden di Slack. Ya, saya akan senang untuk mencoba PR. Tingkat reproduksi saya sekitar 33% (sangat sering).

@workmanw Anda dapat mencoba hal di atas dengan mengkloning ember repo dan menggunakan curl https://github.com/emberjs/ember.js/pull/13116.patch | git am dan melakukan npm run build dan menggunakan dist sebagai bower_components / ember

@krisselden Sayangnya, itu tidak membuat perbedaan :(

Saya memeriksa v2.4.2 , menerapkan tambalan dan membangun. Menyalin ember.min.js ke app/bower_components/ember/ember.debug.js . Menghapus direktori tmp/ dan menjalankan server. Saya mengonfirmasi bahwa tambalan telah diterapkan dengan melihat tab sumber.

Jika seseorang ingin memeriksa ulang, berikut adalah hash setelah patch dan build saya: MD5 (dist/ember.min.js) = 23ab1021bebdf170d21338fecf347937

Senang terus mencoba ide yang mungkin Anda miliki.

@workmanw berdasarkan komentar terakhir di https://bugs.chromium.org/p/v8/issues/detail?id=4839#c7 dan melihat kodenya, apakah Anda menggunakan pencarian pembantu lokal? Saya menduga _findHelper sedang dimasukkan di sini https://github.com/emberjs/ember.js/blob/master/packages/ember-htmlbars/lib/system/lookup-helper.js#L62 saat itu belum pernah melihat kasus ini menjadi kenyataan dan ketika Anda menavigasi ke rute di mana itu menjadi benar hasRegistration kode inline tidak memiliki pemilik untuk deopt.

Pemikiran saya saat ini adalah https://github.com/emberjs/ember.js/commit/8af7da67c4b1eab94a6adfc82c91af98dc3ee532 memicu bug di v8 dan mencegah _findHelper menyejajarkan atau menghangatkan cabang dengan pembantu lokal akan menyelesaikannya hingga bug diperbaiki di v8.

@krisselden Jika Anda memiliki sesuatu yang siap untuk diuji, saya dapat mencobanya. Tingkat reproduksi saya hampir sama dengan @workmanw .

@workmanw Bisakah Anda menguji PR yang saya buat berdasarkan komentar https://bugs.chromium.org/p/v8/issues/detail?id=4839#c9 ?

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

Dengan perubahan ini saya belum bisa membuat aplikasi saya mogok. Jika saya mengembalikan perubahan, itu akan langsung macet.

: confetti_ball:: tada: Saya menguji PR @raido dan saya tidak dapat mereproduksi masalah tersebut. Itu tampaknya menjadi solusi sukses. :tersenyum:

Edit: Diuji dengan Chrome 49 dan Chrome 51.

Saya telah mencoba untuk mengikuti skenario yang dilaporkan dengan cermat, tetapi saya yakin kode ini juga ada di Ember 2.3. Apakah Ember 2.3 juga mengalami masalah ini?

Ya, saya dapat mengonfirmasi bahwa Ember v2.3 terpengaruh oleh ini juga.

Oke, tarik https://github.com/emberjs/ember.js/issues/13118 ke cabang beta, rilis, dan rilis-2-3. Saluran rilis dan beta akan segera mendapatkan versi baru (melalui Travis), gedor sebentar sehingga kami dapat mengonfirmasi bahwa memang memperbaiki ini ...

@workmanw @raido Terima kasih banyak telah menghabiskan begitu banyak waktu mereproduksi bug, bekerja dengan Chromium untuk menemukan & memperbaiki masalah ini.
Ini adalah salah satu Heisenbugs di mana, mencoba menjadi pengguna OSS yang bertanggung jawab, saya menunggu untuk mengajukan masalah selama lebih dari sebulan karena saya tidak dapat membuat inti / twiddle / bin / etc yang stabil. Itu hanya menentang begitu banyak logika sehingga saya pikir itu pasti salah saya. Lain kali saya akan lebih proaktif dan melakukan ping ke ruang Slack untuk sesama korban.

Kerja bagus semuanya!

@ 2468ben saya bertanya-tanya apakah kita mungkin harus memiliki label hesienbug / mungkin vmbug?

[diperbaiki oleh # 13118]

:)

@rwjblue Saya telah memperbarui bower.json saya sekarang untuk menggunakan "ember": "components/ember#9c3e5820" dan saya akan mengirimkannya melalui siklus QA. Saya akan memberi tahu Anda jika ada masalah yang muncul.

Terima kasih banyak!

Kami juga telah mengalami masalah ini dan tampaknya telah memperbaikinya. Saya telah memukuli situs kami terhadap ember#9c3e5820 build selama lebih dari satu jam sekarang dan belum melihat masalah apa pun.

v2.4.3 telah dirilis dengan perbaikan yang ditambahkan di https://github.com/emberjs/ember.js/pull/13118.

Ya ampun, berjam-jam saya habiskan untuk mencoba mereproduksi / memperbaiki bug ini sebelum menemukan utas ini ... ugh. Kerja bagus guys!

kami saat ini menjalankan aplikasi di [email protected] dan kami mencapai masalah yang tepat ini menurut Sentry meskipun kodenya menyertakan solusi di https://github.com/emberjs/ember.js/pull/13118 😞

@ Turbo87 Masalah ini juga telah diperbaiki di Chrome. Jadi seharusnya hanya ada 1 atau 2 versi Chrome yang dapat menjalankan ini.

Apakah Anda yakin itu masalah yang sama?

@workmanw ya, cukup yakin itu sama. tampaknya beberapa pengguna kami masih menjalankan versi Chrome lama dan pada kenyataannya beberapa browser turunan (Sogou Explorer, Opera, Chromium, Dragon) menunjukkan perilaku serupa menurut log Sentry kami

:(. Saya merasakan sakit Anda. Beberapa pelanggan kami adalah perusahaan yang mengunci pengguna ke versi Chrome tertentu dan tidak pernah mengizinkan mereka meningkatkan versi.

Ada kemungkinan masalah ini muncul kembali dengan cara tertentu. Saya dapat mengatakan dengan 100% kepastian bahwa, pada saat itu, solusi ini menyelesaikan masalah bagi kami ( v2.4.3 ).

Sama disini.

@ Turbo87 apakah Anda memiliki versi tertentu?

  • Chrome 49.0.2623
  • Opera 36.0.2130
  • Chromium 48.0.2564
  • Sogou Explorer 1.0.2 Memperbarui
  • Chrome 48.0.2564
  • Chrome 50.0.2632

Chrome 49 sejauh ini adalah yang paling umum karena alasan tertentu

@ Turbo87 apakah Anda pernah menemukan cara untuk mengatasi masalah ini?

@givanse, kami telah meningkatkan ke Ember 2.12 sekarang dan sepertinya tidak mengalami masalah ini lagi

Apakah halaman ini membantu?
0 / 5 - 0 peringkat