Etherpad-lite: Nicht abgefangener TypeError: Die Eigenschaft 'setStateIdle' von null kann nicht gelesen werden

Erstellt am 28. Mai 2018  ·  34Kommentare  ·  Quelle: ether/etherpad-lite

Ich erhalte in Chrome 66 beim Zugriff auf ein Pad in unserer Instanz (mit 1.6.6) die folgende Fehlermeldung.
Der Zugriff mit Firefox 60 funktioniert derweil problemlos. Irgendwelche Tipps?

An error occurred
The error was reported with the following id: 'qZF4pJdMtrdhNgDJlfp0'

Please press and hold Ctrl and press F5 to reload this page, if the problem persists please send this error message to your webmaster:
'ErrorId: qZF4pJdMtrdhNgDJlfp0
URL: https://pad.example.com/padname
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36
Uncaught TypeError: Cannot read property 'setStateIdle' of null in https://pad.example.com/javascripts/lib/ep_etherpad-lite/static/js/pad.js?callback=require.define at line 3'

Es scheint aus diesem Codeabschnitt zu stammen, in dem pad.collabClient null zu sein scheint:

            socket.on("error", function(e) {
                pad.collabClient.setStateIdle(),
                pad.collabClient.setIsPendingRevision(!0)
            });

Beim Anhalten mit einem Breakpoint ist der Fehler e undefiniert.

Laut Aufrufliste trat der Fehler bei diesem Aufruf auf:

            io.connect(n, {
                path: exports.baseURL + "socket.io",
                resource: a,
                reconnectionAttempts: 5,
                reconnection: !0,
                reconnectionDelay: 1e3,
                reconnectionDelayMax: 5e3
            })

PS: Es ist eigentlich überraschend, dass pad.collabClient bereits in handshake() , während es nur in _afterHandshake() initialisiert wird .

PPS: Informationen zur Fehlerbehebung wie folgt:

Etherpad version

Version number: 1.6.6

Git sha: 7e69a82
Installed plugins

ep_etherpad-lite

Installed parts

ep_etherpad-lite/swagger
ep_etherpad-lite/adminsettings
ep_etherpad-lite/adminplugins
ep_etherpad-lite/admin
ep_etherpad-lite/tests
ep_etherpad-lite/socketio
ep_etherpad-lite/errorhandling
ep_etherpad-lite/importexport
ep_etherpad-lite/apicalls
ep_etherpad-lite/webaccess
ep_etherpad-lite/padreadonly
ep_etherpad-lite/padurlsanitize
ep_etherpad-lite/specialpages
ep_etherpad-lite/i18n
ep_etherpad-lite/static
ep_etherpad-lite/express

Installed hooks
Server side hooks

expressCreateServer
    ep_etherpad-lite/node/hooks/express/swagger:expressCreateServer from ep_etherpad-lite/swagger
expressCreateServer
    ep_etherpad-lite/node/hooks/express/adminsettings:expressCreateServer from ep_etherpad-lite/adminsettings
expressCreateServer
    ep_etherpad-lite/node/hooks/express/adminplugins:expressCreateServer from ep_etherpad-lite/adminplugins
expressCreateServer
    ep_etherpad-lite/node/hooks/express/admin:expressCreateServer from ep_etherpad-lite/admin
expressCreateServer
    ep_etherpad-lite/node/hooks/express/tests:expressCreateServer from ep_etherpad-lite/tests
expressCreateServer
    ep_etherpad-lite/node/hooks/express/socketio:expressCreateServer from ep_etherpad-lite/socketio
expressCreateServer
    ep_etherpad-lite/node/hooks/express/errorhandling:expressCreateServer from ep_etherpad-lite/errorhandling
expressCreateServer
    ep_etherpad-lite/node/hooks/express/importexport:expressCreateServer from ep_etherpad-lite/importexport
expressCreateServer
    ep_etherpad-lite/node/hooks/express/apicalls:expressCreateServer from ep_etherpad-lite/apicalls
expressCreateServer
    ep_etherpad-lite/node/hooks/express/padreadonly:expressCreateServer from ep_etherpad-lite/padreadonly
expressCreateServer
    ep_etherpad-lite/node/hooks/express/padurlsanitize:expressCreateServer from ep_etherpad-lite/padurlsanitize
expressCreateServer
    ep_etherpad-lite/node/hooks/express/specialpages:expressCreateServer from ep_etherpad-lite/specialpages
expressCreateServer
    ep_etherpad-lite/node/hooks/i18n:expressCreateServer from ep_etherpad-lite/i18n
expressCreateServer
    ep_etherpad-lite/node/hooks/express/static:expressCreateServer from ep_etherpad-lite/static
socketio
    ep_etherpad-lite/node/hooks/express/adminsettings:socketio from ep_etherpad-lite/adminsettings
socketio
    ep_etherpad-lite/node/hooks/express/adminplugins:socketio from ep_etherpad-lite/adminplugins
expressConfigure
    ep_etherpad-lite/node/hooks/express/webaccess:expressConfigure from ep_etherpad-lite/webaccess
createServer
    ep_etherpad-lite/node/hooks/express:createServer from ep_etherpad-lite/express
restartServer
    ep_etherpad-lite/node/hooks/express:restartServer from ep_etherpad-lite/express

Client side hooks
Bug Needs confirmation

Hilfreichster Kommentar

Gute Nachrichten, @fralix.
Eine gute Dokumentation ist kostbar.

Ich lasse das Problem offen, da ich weiterhin neugierig auf die von @caugner aufgedeckte "Phantom" -Initialisierung bin.

Ich fange an, darüber nachzudenken, wie ich die Codebasis verbessern kann, ohne sie neu zu schreiben (mehr Tests, Linters, statische Analysatoren, vielleicht sogar schrittweise Migration zu TypeScript...), und diese Art von Problemen interessiert mich sehr.

Alle 34 Kommentare

Verwandt?
TypeError: pad.collabClient is null in https://pad.fralix.ovh/javascripts/lib/ep_etherpad-lite/static/js/pad.js?callback=require.define at line 3'
Dies wird für mich anstelle der Uncaught-Zeile angezeigt. Dieses Problem bestand bei mir jahrelang (!) mit der Standardinstallation, ich hatte nur einen weiteren Versuch mit einer Neuinstallation, habe aber immer noch das gleiche Problem mit Firefox (Nightly)

PS: Eigentlich überraschend, dass pad.collabClient bereits im handshake() verwendet wird, während es nur in _afterHandshake() initialisiert wird.

In der Tat, @caugner.
Ich kann den Fehler nicht auslösen ( aktuelle Entwicklung , Firefox 61 , Chromium 68 ), aber die haarige Initialisierung ist ein potenzielles Problem für sich. Die Behebung dieses Problems könnte uns wahrscheinlich einen Hinweis auf dieses Problem geben oder es ganz lösen.

@anugu-chegg, da du eng an dieser Datei für #3318 gearbeitet hast, hast du da ein paar Hinweise?

Hey, ich kann das Problem mit einem richtigen Proxy-Setup nicht mehr reproduzieren:

https://github.com/ether/etherpad-lite/wiki/How-to-put-Etherpad-Lite-behind-a-reverse-Proxy
https://github.com/ether/etherpad-lite/issues/2318#issuecomment -63548542

Ich denke also, das Problem liegt wirklich an der Socket-Verbindung und das Lesen aller Anleitungen kann helfen? :Freude:

Gute Nachrichten, @fralix.
Eine gute Dokumentation ist kostbar.

Ich lasse das Problem offen, da ich weiterhin neugierig auf die von @caugner aufgedeckte "Phantom" -Initialisierung bin.

Ich fange an, darüber nachzudenken, wie ich die Codebasis verbessern kann, ohne sie neu zu schreiben (mehr Tests, Linters, statische Analysatoren, vielleicht sogar schrittweise Migration zu TypeScript...), und diese Art von Problemen interessiert mich sehr.

Hi,
Danke für die Erstellung von Etherpad. Ich verwende es in einem Projekt für Fridays For Future Deutschland.
Dieser Fehler trat auch in unserer Installation, Version 1.7.5 :

Uncaught TypeError: Cannot read property 'setStateIdle' of null in https://domain.removed.also.the.path/static/js/pad.js?callback=require.define at line 3'

Wir haben diese Plugins installiert:

ep_etherpad-lite
ep_headings2
ep_font_color
ep_footer

Wollte es nur melden!
Lassen Sie mich wissen, ob ich weitere Informationen zur Behebung dieses Problems bereitstellen kann.

Ich kann bestätigen, dass dieser Fehler auch in v1.8.0 vorhanden ist.

Dec 12 10:59:51 etherpad nodejs[28467]: #033[33m[2019-12-12 10:59:51.645] [WARN] client - #033[39mUncaught TypeError: Cannot read property 'setStateIdle' of null -- { errorId: 'ZFFGAJRhNPLZkgcdXRxQ',
Dec 12 10:59:51 etherpad nodejs[28467]:    'Uncaught TypeError: Cannot read property \'setStateIdle\' of null',

Ich verwende etherpad_lite Version 1.6.0 Version. wir haben dieses Problem auch so beobachtet

App 19183 output: [33m[2020-03-26 09:29:22.650] [WARN] client - [39mUncaught TypeError: Cannot read property 'setStateIdle' of null -- { errorId: '3tl0hHxTQ9rwZ0ojNXoI',
App 19183 output:   msg:
App 19183 output:    'Uncaught TypeError: Cannot read property \'setStateIdle\' of null',
App 19183 output:   url:
App 19183 output:    'https://etherpad.vnc.biz/etherpad/p/g.INJVOHVXSaiTwtQM$0c6efa006f3911ea8c106f96aa173764',
App 19183 output:   linenumber: 3,
App 19183 output:   userAgent:
App 19183 output:    'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/80.0.3987.87 Chrome/80.0.3987.87 Safari/537.36' }

Kann jemand die Lösung für dieses Problem herausfinden?

und ich kenne dieses Problem im Zusammenhang mit der Socket-Verbindung, finde aber nicht die genaue Ursache für dieses Problem heraus.

@vijaygodhasara Bitte verwenden Sie kein Etherpad 1.6. Bitte aktualisieren Sie und lassen Sie es uns wissen, wenn es weiterhin besteht.

@xshadow Bitte geben Sie einige Informationen an, wie zum Beispiel:

  • Ist Ihr Etherpad unter Windows/Linux?
  • Genaue Git-Revision
  • Läuft Ihr Etherpad hinter einem Reverse-Proxy? Wenn ja, was?
  • Betreibst du irgendwelche Plugins?

FWIW Ich sehe diesen Fehler in keiner unserer Instanzen, daher denke ich, dass es sich um ein Konfigurationsproblem oder etwas handelt, das nicht mit Core zusammenhängt.

Bitte schauen Sie auf https://github.com/ether/etherpad-lite/issues/3405#issuecomment -413032184 - Nach einem erfolgreichen Proxy-Setup ist dieses Problem für mich verschwunden. Ich habe es wieder gesehen, als es eine instabile Netzwerkverbindung gab, also liegt es wahrscheinlich an einigen Problemen mit etwas nicht korrekt zugänglichem, aber hauptsächlich an einem Setup- / Netzwerkproblem.

Ich denke, dieser Fehler kann geschlossen werden, wenn aktuelle Reporter nicht antworten, und wenn jemand erneut darauf stößt, sollten sie weitere Details zur Konfiguration angeben und prüfen, ob es sich um ein Problem mit ihrer Netzwerkverbindung handelt ... Außerdem ist es sehr hilfreich, die zu öffnen Browser-Debugging-Konsole und prüfen Sie, ob Netzwerkverbindungen vorhanden sind. Insbesondere einige falsch eingerichtete CSPs können das Laden von Ressourcen verhindern. Ich hatte das gerade bei einem anderen Projekt.

Schließt, wird wieder geöffnet, wenn jemand Fortschritte macht.

Wenn jemand beim Einrichten einer Instanz Probleme hat (wenn keine sensiblen Benutzerdaten vorhanden sind), kann es interessant sein, einen Blick auf das System zu werfen und von dort aus mit dem Debuggen zu beginnen. Ich denke, ich könnte mir die Zeit leisten, zu prüfen, ob es sich um ein allgemeines Problem mit der Systemkonfiguration handelt, aber ich bin kein NodeJS / Etherpad-Entwickler, daher kann ich das Debuggen nicht fortsetzen, wenn es sich tatsächlich um einen Etherpad-Fehler handelt.

@JohnMcLear Nach einer Überprüfung der Proxy-Einstellungen kann ich bestätigen, dass der in den obigen Kommentaren erwähnte Fix den Zweck erfüllt hat .

Dieser Fehler wird auf verschiedenen Instanzen der Etherpads in Android und Chrome reproduziert.
Getestet auf meinem eigenen Server und auf https://etherpad.wikimedia.org , https://video.etherpad.com.

Ein Fehler ist aufgetreten
Bitte halten Sie Strg gedrückt und drücken Sie F5, um diese Seite neu zu laden
Wenn das Problem weiterhin besteht, senden Sie bitte diese Fehlermeldung an Ihren Webmaster:

ErrorId: XDmLq2ENraoB3lM4ESfu
URL: https://etherpad.wikimedia.org/p/gxz0C7Rncg-J80ra7DQw
UserAgent: Mozilla/5.0 (Linux; Android 10; Mi A2 Lite) AppleWebKit/537.36 (KHTML, wie Gecko) Chrome/83.0.4103.106 Mobile Safari/537.36
Nicht abgefangener TypeError: Die Eigenschaft 'setStateIdle' von null in https://etherpad.wikimedia.org/javascripts/lib/ep_etherpad-lite/static/js/pad.js?callback=require.define&v=f2b033c9 in Zeile 3 kann nicht gelesen werden

Schritte zum Reproduzieren

  1. im Chrome-Browser ein neues Pad öffnen
  2. schreibe etwas
  3. dann klicke auf "home" im Android
  4. dann über die "letzten Anwendungen" alles schließen
  5. und Chrome-Browser erneut ausführen
  6. Es wird Ihr letztes Pad öffnen und diesen Fehler anzeigen

dann über die "letzten Anwendungen" alles schließen
Ich sehe keine "letzten Anwendungen" auf meinem Bildschirm. Wo soll ich suchen?

Oh.. Android... Sek.

Bestätigter Fehler! Gut gemacht zum Nachmachen. Sie bekommen einen Keks, guter Sir! :)

Lokale Replikation mit der neuesten Entwicklung nicht möglich. Das macht also Spaß :)

Kann auf video.etherpad repliziert werden. com:9001 (was afaik direkt zu Etherpad ist).

Um es einzugrenzen, hängt es möglicherweise zusammen mit:

  1. Ein Plugin.
  2. SSL-Zertifikate.
  3. Läuft im Produktionsmodus.
  4. "langsamer" als lokale Konnektivität/Rennbedingung?

Firefox (der gute Browser) Fehler mit pad.collabClient im gleichen Test.

Was machen mobile Browser anders als normale Browser?

Es scheint, dass es in der neuesten Entwicklung bereits behoben ist.

Ich habe das neueste auf https://video.etherpad.com gezogen

Kannst du noch replizieren?

Das Etherpad bewegt sich ziemlich schnell, daher ist es möglich, dass dies in der Version vor dem Ziehen ein Randfall war. video.etherpad.com ist oft ein paar Wochen hinter der Entwicklung zurück, weil ich zu beschäftigt bin, um sie auf dem Laufenden zu halten ;/

From https://github.com/ether/etherpad-lite
   2cd3dccc..75ecb3f4  develop                             -> origin/develop

Hallo @JohnMcLear! Herzlichen Glückwunsch, der Fehler kann auf https://video.etherpad.com nicht reproduziert werden
Danke für deine Arbeit!

Es ist immernoch da. Ich kann nach dem Betrachten des Codes replizieren, bin mir jedoch nicht sicher, wie dies mit dem Schließen und erneuten Öffnen der Registerkarte in Android zusammenhängt. In der Handshake-Funktion von pad.js werden Callbacks für Socket-Ereignisse registriert, die collabClient verwenden. collabClient ist jedoch null, bis es in _afterHandshake direkt nach dem Empfang von CLIENT_VARS festgelegt wird.
So replizieren Sie in Firefox/Chrom auf einem Desktop:
Laden Sie ein Pad mit geöffnetem Entwicklermodus und sobald Sie sehen, dass XHR-Polling to eio das Netzwerk abschneidet. Stellen Sie sicher, dass Sie CLIENT_VARS nicht erhalten haben. Warten Sie dann einige Sekunden, bis die Wiederverbindungsphase beginnt.

Die nächste Frage ist also, warum das Aktualisieren und Neustarten von video.etherpad.com behoben wurde??!

Eine Halbierung zeigte 128f3e15ebf89f69d97dce34c8d5b8c238e952d2 als Fix-Commit. So etwas macht Sinn.

Next-Level-Pro-Entwickler behebt Fehler, bevor sie sich manifestieren....

Ich denke, es gab ein Problem in jquery oder der Art, wie wir es verwenden, das leicht auszulösen war und jetzt mit 128f3e15ebf89f69d97dce34c8d5b8c238e952d2 behoben ist
Der Fehler, wenn ein Reconnect auftritt (zB wegen eines schlechten Netzwerks des Clients) bevor CLIENT_VARS empfangen wird, ist immer noch vorhanden.
In meiner Instanz sehe ich oben Stacktrace ~ 1 Mal am Tag. Ich bin mir nicht sicher, ob es eine dritte Möglichkeit gibt, es auszulösen oder ob jedes Vorkommen in meiner Instanz auf ein schlechtes Netzwerk zurückzuführen ist.

@vijaygodhasara Bitte verwenden Sie kein Etherpad 1.6. Bitte aktualisieren Sie und lassen Sie es uns wissen, wenn es weiterhin besteht.

Ich verwende 1.8.6 und ich habe immer noch den Fehler!

@cdruet können Sie Details

@JohnMcLear Ich habe das gleiche Problem mit 1.8.6 (Master-Zweig)

Hier ein Beispiel: https://mrtopf.de/test.html

Laden dieses Pads: https://yopad.eu/p/textframe

Installierte Plugins sind comments_page und headers2.

Ich habe hoffentlich später Zeit, es bei einer Neuinstallation ohne Plugins zu testen (da ich sie nicht unbedingt in der Produktion deaktivieren möchte)

@JohnMcLear Ich verwende auch comments_page. Darüber hinaus auth_session.

Ich kann heute später ohne comments_page testen, aber ich bin auth_session, um die Pads zu erreichen.

Gesendet mit Unibox

@cdruet und @mrtopf : Können Sie den neuesten Commit im develop Zweig ausprobieren und die Einstellung cookie.sameSite auf None ? Seit v1.8.6 gab es einige Cookie-Änderungen, die relevant sein könnten.

@rhansen kann das jetzt geschlossen werden?

@rhansen sorry, war etwas beschäftigt und das Einrichten eines gedauert . Aber ich habe develop getestet und das scheint zu funktionieren. Also warte ich auf die nächste Veröffentlichung. Vielen Dank!

Ich habe diesen Fehler mit 1.8.5 & der aktuellen Master-Version (basierend auf 1.8.6 = Commit 2c8769a6fd9fa4ed36ed6e32ba0826037795fb37)

Beim Update auf die Entwicklung scheinen die ersten Tests in Ordnung zu sein.

wann ist die nächste Veröffentlichung zu erwarten?

Einstellung: Binden Sie Etherpad über iframe in einen Server ein, der auf localhost läuft.

Stacktrace (ab der Masterversion, 1.8.6++ wie oben erwähnt), falls dies noch relevant ist:

| (anonym) | @ | pad.js?callback=requ…fine&v=564a4939:227
-- | -- | -- | --
| r.emittieren | @ | index.js:83
| r.emittieren | @ | index.js:83
| r.emitAll | @ | index.js:83
| (anonym) | @ | index.js:83
| setTimeout (async) | |
| r.wiederverbinden | @ | index.js:83
| r.onclose | @ | index.js:83
| (anonym) | @ | index.js:83
| r.emittieren | @ | index.js:83
| r.onClose | @ | index.js:83
| (anonym) | @ | index.js:83
| setTimeout (async) | |
| r.onHeartbeat | @ | index.js:83
| (anonym) | @ | index.js:83
| setTimeout (async) | |
| r.setPing | @ | index.js:83
| r.onHandshake | @ | index.js:83
| r.onPacket | @ | index.js:83
| (anonym) | @ | index.js:83
| r.emittieren | @ | index.js:83
| r.onPacket | @ | index.js:83
| n | @ | index.js:83
| e.decodePayload | @ | index.js:83
| r.onData | @ | index.js:83
| (anonym) | @ | index.js:83
| r.emittieren | @ | index.js:83
| i.onData | @ | index.js:83
| i.onLoad | @ | index.js:83
| hasXDR.e.onreadystatechange | @ | index.js:83
| XMLHttpRequest.send (async) | |
| i.erstellen | @ | index.js:83
| ich | @ | index.js:83
| o.Anfrage | @ | index.js:83
| o.doPoll | @ | index.js:83
| r.umfrage | @ | index.js:83
| r.doOpen | @ | index.js:83
| r.öffnen | @ | index.js:83
| r.öffnen | @ | index.js:83
| r | @ | index.js:83
| r | @ | index.js:83
| r.öffnen.r.verbinden | @ | index.js:83
| r | @ | index.js:83
| r | @ | index.js:83
| r | @ | index.js:83
| Händedruck | @ | pad.js?callback=requ…fine&v=564a4939:207
| (anonym) | @ | pad.js?callback=requ…fine&v=564a4939:484
| MachtWerfen | @ | ace2_common.js?callb…ine&v=564a4939:3910
| Prozess | @ | ace2_common.js?callb…ine&v=564a4939:3978
| setTimeout (async) | |
| (anonym) | @ | ace2_common.js?callb…ine&v=564a4939:4016
| Feuer | @ | ace2_common.js?callb…ine&v=564a4939:3645
| hinzufügen | @ | ace2_common.js?callb…ine&v=564a4939:3704
| (anonym) | @ | ace2_common.js?callb…ine&v=564a4939:4036
| Aufgeschoben | @ | ace2_common.js?callb…ine&v=564a4939:4120
| dann | @ | ace2_common.js?callb…ine&v=564a4939:4021
| jQuery.fn.ready | @ | ace2_common.js?callb…ine&v=564a4939:4198
| init | @ | pad.js?callback=requ…fine&v=564a4939:480
| init | @ | pad.js?callback=requ…fine&v=564a4939:960
| (anonym) | @ | test1?lang=de:725
| setTimeout (async) | |
| Rückruf | @ | ace2_common.js?callb…ne&v=564a4939:12053
| (anonym) | @ | ace2_common.js?callb…ne&v=564a4939:12060
| Feuer | @ | ace2_common.js?callb…ine&v=564a4939:3645
| FeuerMit | @ | ace2_common.js?callb…ine&v=564a4939:3775
| fertig | @ | ace2_common.js?callb…ine&v=564a4939:9466
| (anonym) | @ | ace2_common.js?callb…ine&v=564a4939:9708
| laden (asynchron) | |
| senden | @ | ace2_common.js?callb…ine&v=564a4939:9727
| ajax | @ | ace2_common.js?callb…ine&v=564a4939:9367
| jQuery.| @ | ace2_common.js?callb…ine&v=564a4939:9516
| getJSON | @ | ace2_common.js?callb…ine&v=564a4939:9497
| exports.update | @ | ace2_common.js?callb…ne&v=564a4939:12055
| (anonym) | @ | test1?lang=de:717
| (anonym) | @ | test1?lang=de:735

wann ist die nächste Veröffentlichung zu erwarten?

Demnächst. Hoffentlich diese Woche.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen