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)
Le code est :
db.decr('online',function(err){
if(err){
console.log('DECREMENTING ONLINE NUMBER FAILED:');
console.log(err);
}
console.log('DECREMENTING ONLINE NUMBER WAS SUCCESSFUL!');
});
Je n'arrive pas à le reproduire, mais cela n'arrive que lorsque beaucoup de gens sont sur le site. Quand il n'y a que moi et quelques amis qui le testent, cela semble très bien faire le travail en incrémentant et en décrémentant la valeur.
Au fait, cela se produit même sans la fonction de rappel (juste db.decr('online')), j'ai seulement ajouté le rappel pour voir si cela générerait des erreurs.
Je le répète, le code fonctionne bien jusqu'à ce que plus de personnes commencent à l'utiliser. Peut-être qu'il essaie de faire .decr en même temps et qu'il ne peut pas le gérer ou?
Je viens de le remarquer dans les journaux que les appels db.get() renvoient parfois une erreur similaire :
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)
Code:
db.get('triviaAnswer',function(err,dbAnswer){
if(err){
console.log('Error getting triviaAnswer from redis: '+err);
return;
}
De plus, les champs 'en ligne' et 'triviaAnswer' sont déjà définis, et le code ci-dessus fonctionne jusqu'à ce que... Ce n'est pas non plus un "nouveau" code, il fonctionne sur un serveur différent depuis des semaines maintenant, donc je doute qu'il y ait un problème avec cela.
Cela semble être un problème avec newrelic, je vous recommande donc de les contacter à ce sujet. Je suis désolé de ne plus pouvoir vous aider, car je n'utilise pas newrelic tout seul.
C'était ça, merci.
@Alchemystic voudriez-vous entrer dans les détails du correctif? J'ai également trouvé cela localement avec NR, mais la mise à niveau
Je viens d'arrêter d'utiliser newrelic. Je ne l'ai eu que pour diagnostiquer un problème de réseau, mais après avoir découvert qu'il causait des problèmes, je l'ai supprimé.
Je viens de rencontrer ce problème avec [email protected]
et [email protected]
. Remettre newrelic à 1.28.0 a supprimé le problème.
Cependant, l'utilisation de redis 2.6.2 et newrelic 1.28.3 fonctionne correctement.
Commentaire le plus utile
Je viens de rencontrer ce problème avec
[email protected]
et[email protected]
. Remettre newrelic à 1.28.0 a supprimé le problème.Cependant, l'utilisation de redis 2.6.2 et newrelic 1.28.3 fonctionne correctement.