Node-redis: TypeError: Kann der schreibgeschützten Eigenschaft 'callback' von decr nicht zugewiesen werden

Erstellt am 23. Juni 2016  ·  6Kommentare  ·  Quelle: NodeRedis/node-redis

  • Version : Knoten redis 2.6.2
  • Plattform : Knoten 4.4.5 auf Ubuntu 14.04
  • Beschreibung :
    Ich erhalte diesen Fehler immer wieder, wenn ich versuche, einen einfachen Online-Zähler in Redis zu verringern:
    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)

Der Code lautet:

    db.decr('online',function(err){
        if(err){
            console.log('DECREMENTING ONLINE NUMBER FAILED:');
            console.log(err);
        }
        console.log('DECREMENTING ONLINE NUMBER WAS SUCCESSFUL!');
    });

Ich kann es nicht reproduzieren, aber es passiert nur, wenn viele Leute auf der Website sind. Wenn nur ich und ein paar Freunde es testen, scheint es die Aufgabe zu erfüllen, den Wert zu erhöhen und zu verringern.

Übrigens passiert es auch ohne die Callback-Funktion (nur db.decr('online')), ich habe den Callback nur hinzugefügt, um zu sehen, ob er Fehler auslöst.

Ich wiederhole, der Code funktioniert einwandfrei, bis mehr Leute ihn verwenden. Vielleicht versucht es gleichzeitig .decr zu machen und kann damit nicht umgehen oder?

question

Hilfreichster Kommentar

Ich habe dieses Problem gerade mit [email protected] und [email protected] . Das Zurücksetzen von newrelic auf 1.28.0 hat das Problem behoben.

Die Verwendung von redis 2.6.2 und newrelic 1.28.3 funktioniert jedoch einwandfrei.

Alle 6 Kommentare

Habe gerade in den Protokollen bemerkt, dass db.get()-Aufrufe manchmal auch einen ähnlichen Fehler auslösen:

    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;
                }

Außerdem sind die Felder 'online' und 'triviaAnswer' bereits gesetzt, und der obige Code funktioniert, bis ... Nun, bis es nicht funktioniert. Es ist auch kein "neuer" Code, er funktioniert jetzt seit Wochen auf einem anderen Server, daher bezweifle ich, dass es ein Problem damit gibt.

Dies scheint ein Problem mit newrelic zu sein, daher empfehle ich, sie diesbezüglich zu kontaktieren. Es tut mir leid, dass ich dir nicht mehr helfen kann, da ich newrelic nicht alleine verwende.

Das wars, danke.

@Alchemystic würde es Ihnen etwas Fehlerbehebung einzugehen ? Ich habe dies auch lokal mit NR gefunden, aber ein Upgrade auf 2.6.2 (von 2.6.0-1) schien es für mich zu beheben, also möchte ich sicherstellen, dass dies nicht nur ein Ablenkungsmanöver ist.

Ich habe gerade aufgehört, newrelic zu verwenden. Ich habe es nur bekommen, um ein Netzwerkproblem zu diagnostizieren, aber nachdem ich herausgefunden hatte, dass es Probleme verursacht, habe ich es entfernt.

Ich habe dieses Problem gerade mit [email protected] und [email protected] . Das Zurücksetzen von newrelic auf 1.28.0 hat das Problem behoben.

Die Verwendung von redis 2.6.2 und newrelic 1.28.3 funktioniert jedoch einwandfrei.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen