Kommentare und Bilder ins Nirvana und nicht in die Datenbank

Hier können Probleme und alles andere in Deutscher Sprache gelöst werden.
Post Reply
User avatar
Zugschlus
Regular
Posts: 130
Joined: Sun Feb 05, 2006 12:54 am
Location: St. Ilgen, Germany
Contact:

Kommentare und Bilder ins Nirvana und nicht in die Datenbank

Post by Zugschlus » Tue May 05, 2020 9:52 am

Hallo,

ich habe auf einem neuen Server eine neue Instanz von s9y eingerichtet, diesmal mit PostgreSQL Datenbank auf einem anderen Host anstelle der früheren lokalen MySQL und habe ein paar Tabelleninhalte (entries, coments, categories, tags etc bla) in die neue Datenbank importiert. Scheint alles zu funktionieren, bis auf das Erstellen von Kommentaren und das Hochladen von Medien.

Wenn ich versuche, etwas zu kommentieren, sagt mir das Frontend "Comment was successfully added", der Kommentar ist aber nicht sichtbar, es steht nix im Backend, der Kommentar wird nicht in die comments-Tabelle in der Datenbank eingetragen und im Errorlog ist auch nix.

Wenn ich ein Bild hochlade, landet das Bild im Directory uploads auf der Platte, ist aber in der Medienlibrary nicht sichtbar (jedenfalls taucht es nicht auf, wenn ich nach Datum sortiere, ich hab jetzt nicht die ganze Datenbank durchgeschaut).

Wie finde ich jetzt raus, was da schief läuft?

Grüße
Marc
--
Marc Haber, St. Ilgen, Germany
https://blog.zugschlus.de/ - nach langer Pause jetzt wieder online

User avatar
Zugschlus
Regular
Posts: 130
Joined: Sun Feb 05, 2006 12:54 am
Location: St. Ilgen, Germany
Contact:

Re: Kommentare und Bilder ins Nirvana und nicht in die Datenbank

Post by Zugschlus » Tue May 05, 2020 2:58 pm

(Artikel nochmal bearbetitet, da der Upload von Bildern auch nicht geht).
--
Marc Haber, St. Ilgen, Germany
https://blog.zugschlus.de/ - nach langer Pause jetzt wieder online

User avatar
Zugschlus
Regular
Posts: 130
Joined: Sun Feb 05, 2006 12:54 am
Location: St. Ilgen, Germany
Contact:

Re: Kommentare und Bilder ins Nirvana und nicht in die Datenbank

Post by Zugschlus » Wed May 06, 2020 1:02 pm

Okeeh. Das muss irgendwas mit den importierten Daten oder meiner Konfiguration zu tun haben; in einer frischen, leeren Neuinstallation geht's.
--
Marc Haber, St. Ilgen, Germany
https://blog.zugschlus.de/ - nach langer Pause jetzt wieder online

User avatar
onli
Regular
Posts: 2340
Joined: Tue Sep 09, 2008 10:04 pm
Contact:

Re: Kommentare und Bilder ins Nirvana und nicht in die Datenbank

Post by onli » Wed May 06, 2020 3:55 pm

Beruhigend :) Eventuell fehlten da das autoincrement bei der Datenbank.

User avatar
Zugschlus
Regular
Posts: 130
Joined: Sun Feb 05, 2006 12:54 am
Location: St. Ilgen, Germany
Contact:

Re: Kommentare und Bilder ins Nirvana und nicht in die Datenbank

Post by Zugschlus » Wed May 06, 2020 5:39 pm

onli wrote:
Wed May 06, 2020 3:55 pm
Beruhigend :) Eventuell fehlten da das autoincrement bei der Datenbank.
Fast richtig ;-)

Bei PostgreSQL gibt es sogenannte Sequenzen, die unter anderem für die Ermittlung des nächsten Wertes für solche Spalten verwendet werden; das ist wohl das PostgreSQL-Gegenstück zu Autoincrement.

Wenn jetzt eine Spalte definiert ist als

Code: Select all

 id         | integer                |           | not null | nextval('s9y_comments_id_seq'::regclass) | plain    |              | 
wird stumpf der nächste Wert aus der Sequenz genommen. Da meine Datenbank aus einem Dump gefüllt wurde, haben die Sequenzwerte nicht gestimmt, was das UNIQUE Constraint der Primary Keys verletzt hat.

Und da im Datenbankabstraktionslayer von s9y dankenswerterweise $ReportErr im Default auf False gesetzt ist, merkt der Code in ./include/functions_comments.inc.php in function serendipity_insertComment diesen Fehler nicht, macht munter weiter und meldet Erfolg.

Ähnliches passiert vermutlich im Code für das Hinzufügen von Medien, das habe ich im Detail nicht mehr ausgeforscht, weil nach manueller Korrektur aller Sequenzen für Felder, die ein nextval() in ihrem defaultwert haben, auch das Hinzufügen von Medien wieder funktioniert hat.

Das wäre kein ganz so fieser Bug gewesen, wenn die von PostgreSQL kommende, klare Fehlermeldung ("UNIQUE constraint violation for field id", wenn ich mich richtig einnere) nicht irgendwo völlig ungeloggt im Nirvana verschwinden würde. So, wie es jetzt ist, war das für einen PHP- und PostgreSQL-Noob wie mich erschütternd nichttrivial.

Grüße
Marc
--
Marc Haber, St. Ilgen, Germany
https://blog.zugschlus.de/ - nach langer Pause jetzt wieder online

User avatar
onli
Regular
Posts: 2340
Joined: Tue Sep 09, 2008 10:04 pm
Contact:

Re: Kommentare und Bilder ins Nirvana und nicht in die Datenbank

Post by onli » Wed May 06, 2020 5:43 pm

Das Postgrest-Datenbanklayer braucht bestimmt mehr Aufmerksamkeit. S9y stammt halt noch aus der Zeit, als außer MySQL im Grunde nichts genutzt wurde. Sicher schon besser geworden (und sqlite klappt auch gut), aber wenn du da über Sachen stolperst gerne per Pull Request korrigieren.

User avatar
Zugschlus
Regular
Posts: 130
Joined: Sun Feb 05, 2006 12:54 am
Location: St. Ilgen, Germany
Contact:

Re: Kommentare und Bilder ins Nirvana und nicht in die Datenbank

Post by Zugschlus » Wed May 06, 2020 6:38 pm

onli wrote:
Wed May 06, 2020 5:43 pm
Das Postgrest-Datenbanklayer braucht bestimmt mehr Aufmerksamkeit. S9y stammt halt noch aus der Zeit, als außer MySQL im Grunde nichts genutzt wurde. Sicher schon besser geworden (und sqlite klappt auch gut), aber wenn du da über Sachen stolperst gerne per Pull Request korrigieren.
Die abwesende Fehlerbehandlung an diesen zwei Stellen ist im datenbankunabhängigen "für alle" Code, z.B.

Code: Select all

    serendipity_db_query($query);
(./include/functions_comments.inc.php Zeile 875).

Und nein, sorry, die Fehlerbehandlung fehlt an SO vielen Stellen, das nachzubessern käme einem kompletten Rewrite gleich. Dazu fehlt mir die Zeit und auch die PHP-Kenntnisse. Das ist im Rahmen meiner Möglichkeiten beyond repair. Tut mir leid.

Grüße
Marc

P.S.: In PostgreSQL bin ich auch neu, ich hab das absichtlich hier benutzt um erste Erfahrungen sammeln zu können. Dass ich mich da gleich bis zur Halskrause reinstürzen musste war nicht geplant, wenn ich das gewusst hätte hätte ich vermutlich gleich brav MariaDB genommen wie sonst überall auch.
--
Marc Haber, St. Ilgen, Germany
https://blog.zugschlus.de/ - nach langer Pause jetzt wieder online

User avatar
thh
Regular
Posts: 418
Joined: Thu Oct 26, 2006 2:38 pm
Location: Stuttgart, Germany
Contact:

Re: Kommentare und Bilder ins Nirvana und nicht in die Datenbank

Post by thh » Sat May 09, 2020 10:11 pm

Zugschlus wrote:
Wed May 06, 2020 6:38 pm
Die abwesende Fehlerbehandlung an diesen zwei Stellen ist im datenbankunabhängigen "für alle" Code, z.B.

Code: Select all

    serendipity_db_query($query);
(./include/functions_comments.inc.php Zeile 875).
Soweit ich das verstehe (! - das ist eine bewusste Einschränkung), ersetzen die datenbankspezifischen Funktionen die generischen, wie bspw. bei serendipity_db_query. Die Version für MySQL hat durchaus Error-Reporting (also einerseits im Code, andererseits habe ich ab und an Datenbankfehlermeldungen in meinem Blog oder einem der Testblogs).

Die Crux bei einer über viele Jahre gewachsenen Software wie Serendipity mit einem sehr überschaubaren Entwicklerteam ist halt, dass oft und in der Breite genutzter Code (das wäre hier MySQL) und der Code, den einer der Entwickler selbst nutzt (das wäre hier sqlite), intensiv getestet wird und Fehler da schnell auffallen, sonst aber eher nicht. Das betrifft PostgreSQL als Datenbank, aber auch gealterte Plugins außerhalb des Mainstreams.
Zugschlus wrote:
Wed May 06, 2020 6:38 pm
Und nein, sorry, die Fehlerbehandlung fehlt an SO vielen Stellen, das nachzubessern käme einem kompletten Rewrite gleich. Dazu fehlt mir die Zeit und auch die PHP-Kenntnisse. Das ist im Rahmen meiner Möglichkeiten beyond repair. Tut mir leid.
Kein Problem und danke für Deinen Test. Ich notiere mir das mal (meine Kenntnis von SQL im allgemeinen und PostgreSQL im speziellen ist allerdings sehr überschaubar, und ich habe derzeit auch keine Testinstallation mit PostgreSQL, aber irgendwann kommen ja wieder die langen Winternächte oder so...).

User avatar
Zugschlus
Regular
Posts: 130
Joined: Sun Feb 05, 2006 12:54 am
Location: St. Ilgen, Germany
Contact:

Re: Kommentare und Bilder ins Nirvana und nicht in die Datenbank

Post by Zugschlus » Sun May 10, 2020 1:22 pm

thh wrote:
Sat May 09, 2020 10:11 pm
Zugschlus wrote:
Wed May 06, 2020 6:38 pm
Die abwesende Fehlerbehandlung an diesen zwei Stellen ist im datenbankunabhängigen "für alle" Code, z.B.

Code: Select all

    serendipity_db_query($query);
(./include/functions_comments.inc.php Zeile 875).
Soweit ich das verstehe (! - das ist eine bewusste Einschränkung), ersetzen die datenbankspezifischen Funktionen die generischen, wie bspw. bei serendipity_db_query. Die Version für MySQL hat durchaus Error-Reporting (also einerseits im Code, andererseits habe ich ab und an Datenbankfehlermeldungen in meinem Blog oder einem der Testblogs).
Auch die MySQL-Definition von serendipity_db_query belegt ihren Parameter "$reportErr" mit "false" vor. D.h. wenn der Aufrufer nicht ausdrücklich sagt, dass er Fehlermeldungen sehen möchte, sieht er sie nicht, der Fehler wird weder gemeldet noch geloggt.

Wenn ich korrekt gegreppt habe, wird dieser Parameter an exakt Null Stellen im serendipity-code auf "true" gesetzt. Und nein, das ist nicht PostgreSQL-Spezifisch, auch MySQL-Fehler fallen unter den Tisch. Was haben wir für ein Glück, dass die Datenbanken so gutmütig sind.

Grüße
Marc
--
Marc Haber, St. Ilgen, Germany
https://blog.zugschlus.de/ - nach langer Pause jetzt wieder online

User avatar
thh
Regular
Posts: 418
Joined: Thu Oct 26, 2006 2:38 pm
Location: Stuttgart, Germany
Contact:

Re: Kommentare und Bilder ins Nirvana und nicht in die Datenbank

Post by thh » Sun May 10, 2020 9:01 pm

Zugschlus wrote:
Sun May 10, 2020 1:22 pm
Auch die MySQL-Definition von serendipity_db_query belegt ihren Parameter "$reportErr" mit "false" vor. D.h. wenn der Aufrufer nicht ausdrücklich sagt, dass er Fehlermeldungen sehen möchte, sieht er sie nicht, der Fehler wird weder gemeldet noch geloggt.
Jein. $reportErr tut offenbar nicht so ganz das, was man denkt (bzw. im Kommentar dokumentiert ist). Im Code ist (jedenfalls für mysqli) vorgesehen, dass Fehler (nur) dann ausgegeben werden, wenn $serendipity['production'] FALSE ist; das ist bei Alpha-/Beta-Builds der Fall oder wenn man das so setzt. Nur in diesem Fall wird $reportErr überhaupt geprüft; wenn es auf TRUE steht, wird - zusätzlich - ein Backtrace ausgegeben.

Unabhängig davon habe ich auch so schon PHP-Fehlermeldungen im Output gesehen, warum auch immer.

Post Reply