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('online')),我只添加了回调,看看它是否会抛出任何错误。
我再说一遍,代码运行良好,直到更多人开始使用它。 也许它正在尝试同时执行 .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 的问题,因此我建议就此与他们联系。 很抱歉我不能再帮助你了,因为我自己不会使用新遗物。
原来如此,谢谢。
@Alchemystic你介意详细介绍一下这个修复吗? 我也用 NR 在本地找到了这个,但是升级到2.6.2(从 2.6.0-1)似乎对我来说修复了它,所以要确保这不仅仅是一个红鲱鱼。
我刚刚停止使用newrelic。 我只是用它来诊断网络问题,但在发现它导致问题后,我将其删除。
我刚刚用[email protected]
和[email protected]
遇到了这个问题。 将 newrelic 设置回 1.28.0 消除了该问题。
但是,使用 redis 2.6.2 和 newrelic 1.28.3 可以正常工作。
最有用的评论
我刚刚用
[email protected]
和[email protected]
遇到了这个问题。 将 newrelic 设置回 1.28.0 消除了该问题。但是,使用 redis 2.6.2 和 newrelic 1.28.3 可以正常工作。