سؤال

أرى هذا الانهيار الآن ولست على دراية بدرجة كافية مع البنية التحتية للألياف العقدة لمعرفة من أين أبدأ في تفسير الخطأ أو صياغة الرمز ...

Meteor server running on: http://localhost:3000/
W202407-10:06:05.740(-8)? (STDERR) /Users/dauser/.meteor/tools/0b2f28e18b/lib/node_modules/fibers/future.js:173
W202407-10:06:07.363(-8)? (STDERR)                      throw(ex);
W202407-10:06:07.363(-8)? (STDERR)                            ^
W202407-10:06:07.363(-8)? (STDERR) RangeError: Maximum call stack size exceeded
=> Exited with code: 8
=> Meteor server restarted

كما أفهمها ، هناك شيء ما يتكرر قليلاً بحماس ، ينفجر مكدس الخادم ، ويتعطل. لسوء الحظ ، ليس لدي أي فكرة حقيقية أين هذه الوظيفة المخالفة-نظرت إلى مكالمة My Deps.Autorun (واحدة فقط في الوقت الحالي) ولا يبدو أنها المشكلة. لا يتم تنفيذ أي من الكود الخاص بي مع عودة صريحة ، وليس لدي أي سبب للشك في أن الأشياء الكبيرة يتم نقلها. من الواضح ، لست متأكدًا حقًا ، بالطبع.

أنا حقًا أبحث فقط عن نصيحة حول كيفية توصيل الكود لأريني أين تخرج الأمور عن السيطرة. نظرًا لأن Meteor يقوم بعمل كبير وراء الكواليس ، سيكون من المفيد حقًا أن يعطيني أي شخص بعض المؤشرات حول مكان النظر.

فقط أعود إلى هذا ، وما زلت ضائعًا جدًا فيما يتعلق بالمكان. هذه من شأن التحديث المقترح إلى Node 0.11.x أن يعطيني مزيدًا من المعلومات ، لكن لا يبدو أن القيام بذلك قد أضاف المزيد من التفاصيل عند تعطلها.

يحدث التعطل بعد أي تفاعل في الصفحة-أي ، يبدأ الخادم ويعمل على ما يرام ، ولكن إذا قمت بإعادة تحميل في المتصفح أو التفاعل مع الصفحة نفسها ، Boom!

بالطلب الشائع ، إليك رمز الخادم:

isAuthorized = () ->
    console.log "checking authorization"
    this.userId == Assets.getText('authorizedUsers')

Meteor.methods(
    isAuthorized : isAuthorized
    filePickerKey : () -> 
        # TODO: properly abstract this, rather than copy/paste...       
        if this.userId == Assets.getText('authorizedUsers')
            Assets.getText('fpKey')
        else
            Meteor.Error 403, 'Error 403: Forbidden')

خط عدم التخلص من 172 من Future.js لم يقدم المزيد من التفاصيل:

I2041-15:52:07.363(-8)? Resolve cb threw Maximum call stack size exceeded

وهنا هي المشكلة التي أواجهها أثناء محاولة استخدام رئيس مجلس الإدارة. لقد كنت ألعب مع هذا لمدة نصف ساعة الماضية ، لذلك من المحتمل أن أرتكب بعض الأخطاء الأساسية ، لكن: قمت بتثبيت رئيس العقدة عبر NPM (NPM Install -G Node-Inspector).

ثم أحاول

$ node-inspector &
[1] 3408
$ Node Inspector v0.6.2
  info  - socket.io started
Visit http://127.0.0.1:8080/debug?port=5858 to start debugging.

$ meteor &
[2] 3413
$ [[[[[ ~/Projects/indefinite-ways ]]]]]

=> Meteor server running on: http://localhost:3000/

$ kill -s USR1 3413
Hit SIGUSR1 - starting debugger agent.
debugger listening on port 5858

حتى الان جيدة جدا. في هذه المرحلة ، لا يكون جانب العميل مفتوحًا في متصفحي (أي عدم وجود علامة تبويب يشير إلى LocalHost: 3000). أفتح علامة تبويب كروم تشير إلى LocalHost: 5858 ، وشاهد مصدر Meteor.js قمت بتعيين نقطة توقف على السطر 6 من Meteor.js

var Fiber = require('fibers');

ثم افتح علامة تبويب عميل Meteor (LocalHost: 3000) وملفقة في التدفق المذكور أعلاه مرة أخرى. لا يتوقف مصحح الأخطاء على السطر 6 ، أو بأي طريقة أخرى تشير إلى أنه لاحظ. نفس الشيء صحيح إذا قمت بتعيين نقطة توقف في السطر 3.

هل كانت مفيدة؟

المحلول 2

تأتي الإجابة الأكثر فائدة قليلاً من أسئلة وأجوبة نيزك غير رسمي:

$ node-inspector &
$ NODE_OPTIONS='--debug-brk' mrt run &

يبدأ هذا عملية المعمد العقدة في الخلفية ، ثم يبدأ في الاستماع إلى حاوية عقدة Meteor مع مجموعة أعلام التصحيح الصحيحة. فتح علامة تبويب الكروم إلى http://127.0.0.1:8080/debug?port=5858 اسمحوا لي أن أتجول.

أيضا ، لا بشكل صارم الجواب على السؤال ، ولكن يبدو أن خط المخالف في الكود أعلاه هو الاتصال Meteor.Error في رمز الخادم. ما زلت أقبل بكل سرور إجابة على هذا كان من شأنه أن يحدد ذلك. أظن أن Meteor.Error ليس على الإطلاق قابلة للإلغاء ، وفي محاولة تحليله ، ينفجر المكدس.

نصائح أخرى

محاولة العقدة, ، يسمح بفحص callstack. هذا ال عرض الفيديو من كيفية استخدامه ، يبدو بصريًا مثل تصحيح الكروم (إنه نفس المصدر الأساسي).

السطر 173 من المستقبل إعادة توجيه استثناء فصاعدا إلى المستمع التالي. يظهر في حالتك أن المستمع التالي هو المثيل نفسه ، مما يؤدي إلى حلقة تعطل المكدس.

تحرير ملف Future.js الخاص بك (المسار المشار إليه في OP) و Uncomment خط Console.log فوقه مباشرة ... ثم يجب أن ترى شرحًا أكثر تفصيلاً لما يجري. إذا لم يكن إخراج Console.log مفيدًا في حل ، فأرسل هنا للحصول على مزيد من التشخيصات.

أظن أنه مرتبط بحزمة مفقودة ، لكل هذا الموضوع.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top