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 في نفس الوقت ولا يمكنها التعامل مع ذلك أو؟
لاحظت للتو في السجلات أن مكالمات 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 يعمل بشكل جيد.
التعليق الأكثر فائدة
لقد واجهت هذه المشكلة مع
[email protected]
و[email protected]
. أدى تعيين الإصدار الجديد إلى 1.28.0 إلى إزالة المشكلة.ومع ذلك ، فإن استخدام redis 2.6.2 و newrelic 1.28.3 يعمل بشكل جيد.