Node-redis: TypeError: невозможно назначить только для чтения свойство обратного вызова decr

Созданный на 23 июн. 2016  ·  6Комментарии  ·  Источник: NodeRedis/node-redis

  • Версия : node redis 2.6.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 ('online')), я только добавил обратный вызов, чтобы посмотреть, не возникнет ли ошибка.

Повторяю, код работает нормально, пока его не начнет использовать больше людей. Может быть, он пытается сделать .decr одновременно и не может с этим справиться или?

question

Самый полезный комментарий

Я просто столкнулся с этой проблемой с помощью [email protected] и [email protected] . Установка newrelic обратно на 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, не до 2.6.2 (с 2.6.0-1), похоже, исправило это для меня, поэтому хочу убедиться, что это не просто отвлекающий маневр.

Я просто перестал пользоваться newrelic. Я получил его только для диагностики сетевой проблемы, но, обнаружив, что это вызывает проблемы, я удалил его.

Я просто столкнулся с этой проблемой с помощью [email protected] и [email protected] . Установка newrelic обратно на 1.28.0 устранила проблему.

Однако использование redis 2.6.2 и newrelic 1.28.3 работает нормально.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги