[gelöst] Setupfehler - Logfile existiert nicht

Gesperrt
rethus
Beiträge: 1827
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

[gelöst] Setupfehler - Logfile existiert nicht

Beitrag von rethus » Mo 29. Nov 2010, 15:06

Nach einem Upgrage von 4.8.8 auf die aktuelle 14er Version bekomme ich folgende Meldung:
Setup Ergebnisse
Setup Fehler während der Installation. Bitte schauen Sie in die Datei setuplog.txt (befindet sich im Verzeichnis "contenido/log/") für weitere Informationen.
Unter contenido/ existiert aber lediglich das Verzeichnis /logs/, und dass ist bis auf die Index.php leer.
Is das n Bug?

Nachtrag

Lösung:
Die Läösung an dieser Stelle war ein falscher Pfad in dem Feld Contenido-Server-Pfad. Fehler lag zwar hier bei mir, aber das System sollte solche Fehler erkennen und behandeln können.
In diesem Fall existiert das gesamte Verzeichnis und die Dateistruktur für das Setupscript nicht, und dennoch kommt keine Fehlermeldung. Hier wird (hoffentlich) ein workarround im nächsten Release enthalten sein.
Zuletzt geändert von rethus am Di 30. Nov 2010, 00:58, insgesamt 1-mal geändert.
Could I help you... you can help me... buy me a coffee . (vielen ❤ Dank an: Seelauer, Peanut, fauxxami )

xstable - Onlineshops, Hosting, Domains und Webentwicklung
suther.de - Webentwicklung, IT-Service, IT-Beratung, Linux-Administration

Software... ein Blick wert: GoogleCalender Eventlist, xst_dynamic_contentType

Oldperl
Beiträge: 4084
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: Setupfehler - Logfile existiert nicht

Beitrag von Oldperl » Mo 29. Nov 2010, 17:19

:!: Verschoben.

Zumindest die Übersetzung ist ein Bug. 8)

Zur nicht vorhandenen setuplog.txt bitte prüfen ob für das Verzeichnis contenido/logs die Schreibrechte stimmen.
Wenn dem so ist, und die Datei vorhanden ist, wird in der Fehlermeldung der Name der Datei mit einem direkten Link hinterlegt. Existiert die Datei nicht, wird nur der Dateiname ohne Link geschrieben.

Das sollte aber auch noch geändert werden, den eine Verweis auf eine Datei, die nicht existiert, ist nicht wirklich sinnig. Ich vermute das die Datei evtl. auch in einem anderen Pfad liegen könnte/sollte, daher dieser Umgang mit der Fehlermeldung. Wenn das so wäre sollte man aber auch in Klammern den "anderen" Pfad zur Datei angeben.

Grundsätzlich gehört dieser Bereich nochmal auf logische und sinnige Meldungen und Verfahren geprüft und entsprechend anzupassen.

Gruß aus Franken

Ortwin
CONTENIDO 4.9 Entwickler-Handbuch - Publikation auf medium.com zu meinem angedachten Entwickler-Buch zu CONTENIDO 4.9
ConLite 2.0, alternatives und stabiles Update von Contenido 4.8.x
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

rethus
Beiträge: 1827
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Re: Setupfehler - Logfile existiert nicht

Beitrag von rethus » Mo 29. Nov 2010, 17:56

Ok, also vorweg:

Das Contenido-Verzeichnis liegt bei mir auf einer Subdomain. Das dürfte nicht weiter problematisch sein, da ja auch das Setupscript unter dieser Subdomain aufgerufen wird, und in der config.php die Pfade von der vorherigen Version eingetragen sind.

Das Verzeichnis logs ist vorhanden und mitlerweile hab ich sogar das gesamte document_oot von meiner Subdomain schon auf 777 gesetzt, was auch keine ergebnisse brachte (weder eine existierende setuplog.txt, noch ein fehlerloses upgrade),

Weil die setuplog.txt nicht existierte, hab ich diese angelegt und auf 777 gesetzt. immernoch bleibt diese leer.

Ich hab auf dem server den gesamten webspace nach setuplog.txt durchsucht... existiert nicht!
PS: Im Quellcode hab ich gesehen, dass hier oft mit @fopen(../contenido....) gearbeitet wurde, was eine sinnige Fehlerrückmeldung natürlich gänzlich unmöglich macht:

Code: Alles auswählen

grep -ir "setuplog.txt" ./
./setup/steps/forms/setupresults.php:			if (file_exists($sRootPath . "/contenido/logs/setuplog.txt"))
./setup/steps/forms/setupresults.php:				$sErrorLink = '<a target="_blank" href="../contenido/logs/setuplog.txt">setuplog.txt</a>';
./setup/steps/forms/setupresults.php:				$sErrorLink = 'setuplog.txt';	
./setup/steps/forms/systemtest.php:		$this->logFilePrediction(	"contenido/logs/setuplog.txt",
./setup/dbupdate.php:			$fp = @fopen("../contenido/logs/setuplog.txt", "w");
Und sucht man gar nach "@f" um alle File-Handlings zu finden, deren ausgabe einfach unterdrückt werden, bekommt man bei der Ausgabe das grausen.
Hier müsste meiner Meinung nach mal ein vernünftiges Exception-Handling her ( http://php.net/manual/de/language.exceptions.php )
Could I help you... you can help me... buy me a coffee . (vielen ❤ Dank an: Seelauer, Peanut, fauxxami )

xstable - Onlineshops, Hosting, Domains und Webentwicklung
suther.de - Webentwicklung, IT-Service, IT-Beratung, Linux-Administration

Software... ein Blick wert: GoogleCalender Eventlist, xst_dynamic_contentType

rethus
Beiträge: 1827
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Re: Setupfehler - Logfile existiert nicht

Beitrag von rethus » Mo 29. Nov 2010, 18:31

Ok, hier die Lösung der Story.

Ich habe in dem Upgrade-Formular >> Step 2 bei Contenidi-Server-Pfad einen Fehler in dem Pfad gehabt. Der HTTP-Pfad war richtig.
Leider wird dieser Fehler nirgendwo richtig behandelt, weswegen keinerlei infos ausgegeben werden - und natürlich kein Logfile geschrieben werden kann. :roll:

Um hier Contenido gesprächiger zu machen, sollte in der Datei setup/lib//functions.system.php bei Zeile 240, wo die fertig generierten Pfade für die weitere Setup-Routine fertig zusammengestellt sind nochmal eine Frage erfolgen, ob diese Verzeichnisse den auch wirklich existieren.
Im Fehlerfall sollte eine Exception ausgegeben und das Setup abgebrochen werden.
Could I help you... you can help me... buy me a coffee . (vielen ❤ Dank an: Seelauer, Peanut, fauxxami )

xstable - Onlineshops, Hosting, Domains und Webentwicklung
suther.de - Webentwicklung, IT-Service, IT-Beratung, Linux-Administration

Software... ein Blick wert: GoogleCalender Eventlist, xst_dynamic_contentType

Oldperl
Beiträge: 4084
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: Setupfehler - Logfile existiert nicht

Beitrag von Oldperl » Mo 29. Nov 2010, 23:21

Hallo,
rethus hat geschrieben:Hier müsste meiner Meinung nach mal ein vernünftiges Exception-Handling her ( http://php.net/manual/de/language.exceptions.php )
Das ist korrekt. Wobei das sicherlich nur nach und nach möglich sein wird. Aber auf alle Fälle ein Punkt, der bei einem "großen Redesign" von Contenido mit auf die Liste gehört.
rethus hat geschrieben:Um hier Contenido gesprächiger zu machen, sollte in der Datei setup/lib//functions.system.php bei Zeile 240, wo die fertig generierten Pfade für die weitere Setup-Routine fertig zusammengestellt sind nochmal eine Frage erfolgen, ob diese Verzeichnisse den auch wirklich existieren.
Im Fehlerfall sollte eine Exception ausgegeben und das Setup abgebrochen werden.
Nun, wenn du da gedanklich, und wie es scheint auch im Code, schon so weit mit bist, warum postest du nicht einfach mal die angepassten Funktionen und Klassen und wir können das dann Testen.

Gruß aus Franken

Ortwin
CONTENIDO 4.9 Entwickler-Handbuch - Publikation auf medium.com zu meinem angedachten Entwickler-Buch zu CONTENIDO 4.9
ConLite 2.0, alternatives und stabiles Update von Contenido 4.8.x
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

rethus
Beiträge: 1827
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Re: Setupfehler - Logfile existiert nicht

Beitrag von rethus » Di 30. Nov 2010, 00:47

Sollte relativ simpel sein, wenn auch hier und da Änderung-bedarf an mehreren Stellen besteht.
Hab es hier nur mal schnell zusammen geschrieben.
Code in setup/lib/functions.system.php bei Zeile 240

Code: Alles auswählen

 
    $root_path = stripLastSlash($root_path);
    $root_http_path = stripLastSlash($root_http_path);
    return array($root_path, $root_http_path);
Ändern in

Code: Alles auswählen

 
if(is_dir($root_path)){        
      $root_http_path = stripLastSlash($root_http_path);
      return array($root_path, $root_http_path);
}else return false;
Da die Funktion nun anstatt einem Array auch false zurückgeben kann, muss in den verarbeitenden Dateien :
Ein grep -ir "getSystemDirectories" * ergibt die entsprechenden Dateien inkl. des betreffenden Codes:

Code: Alles auswählen

dbupdate.php:list($root_path, $root_http_path) = getSystemDirectories();
lib/functions.system.php:                         function getSystemDirectories ($bOriginalPath = false)
makeconfig.php:                                       list($root_path, $root_http_path) = getSystemDirectories();
steps/forms/setupresults.php:			list($root_path, $root_http_path) = getSystemDirectories();
steps/forms/setupresults.php:			list($sRootPath, $rootWebPath) = getSystemDirectories();
steps/forms/systemdata.php:		        list($a_root_path, $a_root_http_path) = getSystemDirectories();
steps/forms/pathinfo.php:		                list($root_path, $root_http_path) = getSystemDirectories(true);
steps/forms/pathinfo.php:		                list($a_root_path, $a_root_http_path) = getSystemDirectories();
steps/forms/clientadjust.php:		        list($a_root_path, $a_root_http_path) = getSystemDirectories();
der Aufruf der Funktion auch mit einer IF-Abfrage gekapselt werden:

Code: Alles auswählen

if(is_array( getSystemDirectories() )){ alles bestens mach weiter....}
else { Fehler, setup abrechen und Fehlermeldung ausgeben. }
Could I help you... you can help me... buy me a coffee . (vielen ❤ Dank an: Seelauer, Peanut, fauxxami )

xstable - Onlineshops, Hosting, Domains und Webentwicklung
suther.de - Webentwicklung, IT-Service, IT-Beratung, Linux-Administration

Software... ein Blick wert: GoogleCalender Eventlist, xst_dynamic_contentType

Oldperl
Beiträge: 4084
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: [gelöst] Setupfehler - Logfile existiert nicht

Beitrag von Oldperl » Di 30. Nov 2010, 10:01

Soderle, nachdem ich heute Nacht nicht mehr antworten konnte/durfte, da das Forum nicht mehr erreichbar war, nun hier was ich geantwortet habe.
Hmm, sollte nicht besser die Funktion gleich den Fehler behandeln anstatt nur ein false zurückzugeben. Hier jeden Aufruf der Funktion selbst zu prüfen macht IMO wenig Sinn, da eigentlich immer die gleiche Meldung zu geben wäre. Da ich bei nicht vorhandenem root-Pfad eh nicht weiter machen kann, wäre auch ein die() an dieser Stelle eine Alternative. Eine Exception zu werfen würde nur was bringen, wenn wir auch das Handling dazu einbauen würden.

Weiß grad nicht inwieweit das Setup eine Fehlerseite hat die ich redirecten könnte, wobei man den Fehlergrund als SessionVar mitgeben könnte.
Ich denke deine Lösung funktioniert zwar, ist mir aber noch etwas zu Quick&Dirty. Wenn wir da was einbauen sollten wir es gleich vernünftig machen.

Gruß aus Franken

Ortwin
CONTENIDO 4.9 Entwickler-Handbuch - Publikation auf medium.com zu meinem angedachten Entwickler-Buch zu CONTENIDO 4.9
ConLite 2.0, alternatives und stabiles Update von Contenido 4.8.x
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

Gesperrt