Node-redis: TypeError: لا يمكن التخصيص للقراءة فقط خاصية 'callback' من decr

تم إنشاؤها على ٢٣ يونيو ٢٠١٦  ·  6تعليقات  ·  مصدر: NodeRedis/node-redis

  • الإصدار : node redis 2.6.2.2
  • النظام الأساسي : Node 4.4.5 على Ubuntu 14.04
  • الوصف :
    أستمر في تلقي هذا الخطأ أثناء محاولتي إنقاص عداد بسيط عبر الإنترنت في redis:
    TypeError: Cannot assign to read only property 'callback' of decr
    at RedisClient.internalSendCommandWrapper (/home/alex/node_modules/newrelic/lib/instrumentation/redis.js:76:22)
    at RedisClient.wrappedFunction [as internal_send_command] (/home/alex/node_modules/newrelic/lib/transaction/tracer/index.js:354:24)
    at RedisClient.(anonymous function).RedisClient.(anonymous function) (/home/alex/node_modules/redis/lib/commands.js:45:25)
    at Socket.eval (eval at <anonymous> (/home/alex/server2.js:2:52), <anonymous>:2456:12)
    at emitOne (events.js:77:13)
    at Socket.emit (events.js:169:7)
    at Socket.emit (/home/alex/node_modules/socket.io/lib/socket.js:128:10)
    at Socket.onclose (/home/alex/node_modules/socket.io/lib/socket.js:425:8)
    at Client.onclose (/home/alex/node_modules/socket.io/lib/client.js:232:24)
    at Client.onerror (/home/alex/node_modules/socket.io/lib/client.js:213:8)

الكود هو:

    db.decr('online',function(err){
        if(err){
            console.log('DECREMENTING ONLINE NUMBER FAILED:');
            console.log(err);
        }
        console.log('DECREMENTING ONLINE NUMBER WAS SUCCESSFUL!');
    });

لا يبدو أنني أقوم بتكرار ذلك ، لكن هذا يحدث فقط عندما يكون الكثير من الأشخاص على الموقع. عندما أختبر أنا واثنين من الأصدقاء فقط ، يبدو أنه يقوم بالمهمة على ما يرام في زيادة القيمة وتقليلها.

بالمناسبة ، يحدث ذلك حتى بدون وظيفة رد الاتصال (فقط db.decr ("متصل")) ، أضفت فقط رد الاتصال لمعرفة ما إذا كان سيؤدي إلى ظهور أي أخطاء.

أكرر ، الكود يعمل بشكل جيد حتى يبدأ المزيد من الناس في استخدامه. ربما تحاول عمل .decr في نفس الوقت ولا يمكنها التعامل مع ذلك أو؟

question

التعليق الأكثر فائدة

لقد واجهت هذه المشكلة مع [email protected] و [email protected] . أدى تعيين الإصدار الجديد إلى 1.28.0 إلى إزالة المشكلة.

ومع ذلك ، فإن استخدام redis 2.6.2 و newrelic 1.28.3 يعمل بشكل جيد.

ال 6 كومينتر

لاحظت للتو في السجلات أن مكالمات db.get () تؤدي أيضًا إلى حدوث خطأ مشابه في بعض الأحيان:

    TypeError: Cannot assign to read only property 'callback' of get
    at RedisClient.internalSendCommandWrapper (/home/alex/node_modules/newrelic/lib/instrumentation/redis.js:76:22)
    at RedisClient.wrappedFunction [as internal_send_command] (/home/alex/node_modules/newrelic/lib/transaction/tracer/index.js:354:24)
    at RedisClient.(anonymous function).RedisClient.(anonymous function) (/home/alex/node_modules/redis/lib/commands.js:45:25)
    at eval (eval at <anonymous> (/home/alex/server2.js:2:52), <anonymous>:2384:16)
    at checkLogin (eval at <anonymous> (/home/alex/server2.js:2:52), <anonymous>:572:13)
    at Socket.eval (eval at <anonymous> (/home/alex/server2.js:2:52), <anonymous>:2001:9)
    at emitOne (events.js:77:13)
    at Socket.emit (events.js:169:7)
    at Socket.onevent (/home/alex/node_modules/socket.io/lib/socket.js:335:8)
    at Socket.onpacket (/home/alex/node_modules/socket.io/lib/socket.js:295:12)

شفرة:

            db.get('triviaAnswer',function(err,dbAnswer){
                if(err){
                    console.log('Error getting triviaAnswer from redis: '+err);
                    return;
                }

أيضًا ، تم تعيين حقلي "online" و "triviaAnswer" بالفعل ، ويعمل الكود أعلاه حتى .. حسنًا حتى لا يحدث ذلك. إنه ليس رمزًا "جديدًا" أيضًا ، إنه يعمل على خادم مختلف منذ أسابيع ، لذلك أشك في وجود مشكلة في ذلك.

يبدو أن هذه مشكلة في newrelic ، لذلك أوصي بالاتصال بهم بخصوص هذا الأمر. أنا آسف لأنني لا أستطيع مساعدتك بعد الآن ، لأنني لا أستخدم newrelic بمفردي.

كان هذا هو ، شكرا لك.

@ Alchemystic هل تمانع في الخوض في التفاصيل حول الإصلاح؟ لقد وجدت هذا أيضًا محليًا مع NR ، ولكن الترقية إلى 2.6.2 (من 2.6.0-1) يبدو أنها تصلح الأمر بالنسبة لي ، لذا أريد التأكد من أنها ليست مجرد رنجة حمراء.

لقد توقفت للتو عن استخدام newrelic. لقد حصلت عليه فقط لتشخيص مشكلة في الشبكة ، ولكن بعد أن اكتشفت أنها تسبب مشاكل ، قمت بإزالتها.

لقد واجهت هذه المشكلة مع [email protected] و [email protected] . أدى تعيين الإصدار الجديد إلى 1.28.0 إلى إزالة المشكلة.

ومع ذلك ، فإن استخدام redis 2.6.2 و newrelic 1.28.3 يعمل بشكل جيد.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

adamgajzlerowicz picture adamgajzlerowicz  ·  4تعليقات

dotSlashLu picture dotSlashLu  ·  5تعليقات

aletorrado picture aletorrado  ·  6تعليقات

juriansluiman picture juriansluiman  ·  3تعليقات

shmendo picture shmendo  ·  6تعليقات