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)
El código es:
db.decr('online',function(err){
if(err){
console.log('DECREMENTING ONLINE NUMBER FAILED:');
console.log(err);
}
console.log('DECREMENTING ONLINE NUMBER WAS SUCCESSFUL!');
});
Parece que no puedo replicarlo, pero solo sucede cuando hay mucha gente en el sitio. Cuando solo estamos yo y un par de amigos probándolo, parece que funciona bien aumentando y disminuyendo el valor.
Por cierto, sucede incluso sin la función de devolución de llamada (solo db.decr ('online')), solo agregué la devolución de llamada para ver si arrojaría algún error.
Repito, el código funciona bien hasta que más personas comiencen a usarlo. ¿Quizás está tratando de hacer .decr al mismo tiempo y no puede manejar eso o?
Acabo de notar en los registros que las llamadas a db.get () también arrojan un error similar a veces:
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)
Código:
db.get('triviaAnswer',function(err,dbAnswer){
if(err){
console.log('Error getting triviaAnswer from redis: '+err);
return;
}
Además, los campos 'online' y 'triviaAnswer' ya están configurados, y el código anterior funciona hasta ... Bueno, hasta que no. Tampoco es un código "nuevo", ha estado funcionando en un servidor diferente durante semanas, así que dudo que haya un problema con eso.
Esto parece ser un problema con newrelic, por lo que recomiendo contactarlos al respecto. Lamento no poder ayudarlos más, ya que no uso newrelic por mi cuenta.
Eso fue todo, gracias.
@Alchemystic, ¿te importaría entrar en detalles sobre la solución? También encontré esto localmente con NR, pero la actualización a 2.6.2 (de 2.6.0-1) pareció solucionarlo para mí, así que quiero asegurarme de que no sea solo una pista falsa.
Dejé de usar newrelic. Solo lo obtuve para diagnosticar un problema de red, pero después de descubrir que estaba causando problemas, lo eliminé.
Acabo de resolver este problema con [email protected]
y [email protected]
. Volver a establecer newrelic en 1.28.0 eliminó el problema.
Sin embargo, el uso de redis 2.6.2 y newrelic 1.28.3 funciona bien.
Comentario más útil
Acabo de resolver este problema con
[email protected]
y[email protected]
. Volver a establecer newrelic en 1.28.0 eliminó el problema.Sin embargo, el uso de redis 2.6.2 y newrelic 1.28.3 funciona bien.