Allgemeine Hinweise zu Upgrades

Hilfe zur Installation
Locked
NaN

Allgemeine Hinweise zu Upgrades

Post by NaN »

O Gott! Eine neue Version ist draußen...   :-\

Einige von Euch kennen es bestimmt:
Upgrades auf neuere Versionen - egal ob nun das gesamte CMS oder nur einzelne Module - können mitunter zu einem haareraufenden Albtraum werden. Viele Nutzer stehen dadurch verständlicherweise einem jeden Upgrade immer sehr kritisch gegenüber bzw. zögern damit häufig bis es keinen Support mehr für ihre Version gibt. Dann wird das Ganze erst recht ärgerlich, denn oftmals sind größere Versionssprünge mit weiteren Problemen belastet. Es müssen dann oft auch sehr viele Module mit auf den neuesten Stand gebracht werden oder man braucht eine neuere PHP Version, einen anderen Provider oder oder oder etc. pp.

Die jüngsten Ereignisse - seit dem Erscheinen der Version 1.8 - haben mir verdeutlicht, dass die meisten Probleme bei einem Upgrade nichts mit CMSms oder dem jeweiligen Modul zu tun haben, sondern mit den Systemvorraussetzungen wie z.B. Dateizugriffsrechte, PHP Version oder Datenbankeinstellungen.

Dieses Thema soll alle möglichen Probleme die bei einem Upgrade auftreten können und evtl. deren Lösungen schon im Vorfeld benennen.

Was bisher noch nie geschadet hat, ist ein Backup sowohl der Datenbank als auch der eigenen Dateien (die im Uploads-Verzeichnis).

Ansonsten beginne ich mal mit einem noch relativ unbekannten (weil eher seltenem) Problem.

Teil 1: Datenbankberechtigungen

Wie einige vielleicht schon wissen baut CMSms auf einem Datenbank-Layer AdoDB Lite auf.
Bei einigen Upgrades müssen Änderungen an der Datenbank vorgenommen werden.
Oftmals werden den Tabellen, die beim Installieren angelegt wurden, weitere Felder hinzugefügt.
Dazu werden je nach Bedarf zwei Funktionen des AdoDB Layers verwendet: AddColumnSQL() und AlterColumnSQL().

Laut dem AdoDB Data Dictionary Handbuch funktionieren diese Funktionen aber nicht bei allen Datenbanken und auch nicht in allen Situationen.
Genaugenommen bedeutet dies, dass man als Datenbanknutzer entsprechende Rechte haben muss, um diese Funktionen ausführen zu können.
Bei MySQL heißt das, dass man zusätzlich zu den Rechten Tabellen zu erstellen (CREATE) und Inhalte einzufügen (INSERT) auch noch das Recht haben muss, die Struktur einer bereits bestehenden Tabelle ändern zu können (ALTER TABLE).
Mehr Informationen zu den MySQL Berechtigungen kann man hier nachlesen:
http://dev.mysql.com/doc/refman/5.1/de/ ... vided.html

Wie es bei anderen Datenbanken aussieht weiß ich jetzt nicht, aber es könnte durchaus ähnlich sein.

Bei unzureichenden Berechtigungen führt es dazu, dass diese zusätzlichen Felder nicht angelegt werden und demzufolge die neue Version auch nicht fehlerfrei funktionieren kann.
Das ist übrigens auch der Grund dafür, dass manche Upgrades fehlschlagen, aber eine Neuinstallation problemlos funktioniert.

Hier einige aktuelle Beispiele bei denen sich im Laufe der Diskussion herausgestellt hat, dass genau das der Fall war:
http://forum.cmsmadesimple.org/index.ph ... 656.0.html
http://forum.cmsmadesimple.org/index.ph ... 935.0.html
http://forum.cmsmadesimple.org/index.ph ... 268.0.html

Also bitte tut Euch selbst einen Gefallen und prüft vor jedem Upgrade genau nach, ob ihr ausreichend Datenbankrechte habt. Im Zweifel einfach Euren Provider fragen, ob es Euch gestattet ist, via PHP-Script Änderungen an bestehenden Datenbanktabellen vorzunehmen. Die Stichworte "ALTER TABLE" und "ADD COLUMN" sollten Eurem Provider schon den richtigen Hinweis geben.

Ich hoffe damit einige bislang noch ungelöste Fragen klären zu können.
Last edited by NaN on Mon Sep 20, 2010 2:04 pm, edited 1 time in total.
nockenfell
Power Poster
Power Poster
Posts: 751
Joined: Fri Sep 12, 2008 2:34 pm
Location: Schweiz / Switzerland

Re: Allgemeine Hinweise zu Upgrades

Post by nockenfell »

Danke für die Hinweise. Allerdings sollte zumindest ein Hinweis in der Upgrade Funktion drin sein, wenn etwas so wichtiges nicht geht.
[this message is written with 100% recycled bits]
cyberman

Re: Allgemeine Hinweise zu Upgrades

Post by cyberman »

Hmm, müsste dann eigentlich AdoDB light nicht auch ein false weiterreichen, wenn ein execute nicht ausgeführt werden konnte?

Interessant wäre auch, ob das Verhalten auch mit AdoDB (full) aufgetreten wäre oder ob es ein Bug in AdoDB light ist ...
NaN

Re: Allgemeine Hinweise zu Upgrades

Post by NaN »

Soweit ich weiß gibt AdoDB Lite ebenso wie AdoDb Full true bzw. false zurück, jenachdem ob die Aktion erfolgreich war oder nicht.
Aber das ist genau der Punkt, den ich an CMSms schon immer bemängelt habe.
Es werden zu wenig Fehlerübeprüfungen durchgeführt.
Ich kenne kein Modul oder anderes Script von CMSms, das das Ergebnis der beiden Funktionen tatsächlich prüft, bevor es weitergeht. Die werden einfach ausgeführt und damit hat sich's.
Calguy erwähnte, dass volle Zugriffsrechte des DB Nutzers zu den Systemvorraussetzungen von CMSms gehören würden. Ich habe darüber aber nichts gelesen.
Und wenn dem so ist, dann sollte das auch bei der Installation bzw. beim Upgrade geprüft werden. Habe das Calguy gegenüber schon erwähnt. Lässt sich aber leider nicht so einfach realisieren. Zumindest nicht bei der Installation des Systems, da dazu ja schon eine Datenbank mit Tabelle vorhanden sein muss. Es kann also immer erst nach der Installation geprüft werden, ob diese Funktionen verwendet werden können.
Last edited by NaN on Mon Sep 20, 2010 2:06 pm, edited 1 time in total.
hlf

Re: Allgemeine Hinweise zu Upgrades

Post by hlf »

Soweit ich weiß gibt AdoDB Lite ebenso wie AdoDb Full true bzw. false zurück, jenachdem ob die Aktion erfolgreich war oder nicht.
Es wird ein false oder ein Recordset geliefert, bei einigen Funktionen ein false oder true.
Zugriffsrechte des DB Nutzers
Ich kenne keinen einzigen Provider wo das nicht der Fall ist, zumindest alles das was man mit normalen SQL Dingen machen kann, wie sie hier vorkommen.
wenig Fehlerübeprüfungen
In der Tat wird zwar an vielen Stellen der Rückgabewert überprüft aber bei weiten nicht an allen auch wenn es sich da manchmal um kritische Stellen handelt.

Und es werden keine Vorkehrungen getroffen wenn etwas in die Hosen geht.

Nehmen wir mal als Beispiel changegrouperm.php, da werden die zuerst komplett gelöscht um sie dann neu einzutragen. Klappt eine einzelne Eintragung nicht wird nach Prüfung alles abgebrochen, dann könnten alle oder die meisten Rechte schlichtweg futsch sein, weil es auch keine Mechanismen gibt die alten Rechte wieder herzustellen.

Das aber würde im schlimmsten Fall bedeuten - man kommt nicht mehr ran.

Fatal kann es werden wenn man z.B. beim verschieben von Inhalten einen Verbindungsabriss hat, das Ergebnis ist händisch kaum zu reparieren.

Schaut man sich den Code an:

Code: Select all

		$result = $db->Execute($query, array($contentid));
		$row = $result->FetchRow();
		if (isset($row["item_order"]))
		{
			$order = $row["item_order"];	
		}

		$time = $db->DBTimeStamp(time());
		if ($direction == "down")
		{
			$query = 'UPDATE '.cms_db_prefix().'content SET item_order = (item_order - 1), modified_date = '.$time.' WHERE item_order = ? AND parent_id = ?';
			#echo $query, $order + 1, $parent_id;
			$db->Execute($query, array($order + 1, $parentid));
dann wird zwar das erste Ergebnis abgefragt aber an den sinnvollen Stellen nicht verwendet.
Nun passiert es eben nicht so häufig das etwas gerade im Augenblick x in die Grütze geht, aber es passiert.
NaN

Re: Allgemeine Hinweise zu Upgrades

Post by NaN »

So, da das hier kein Mecker- sondern ein Hilfe-Thread werden soll, werde ich jetzt mal nicht weiter auf irgendwelche Mängel eingehen, sondern lieber ein paar Lösungen posten ;)

Teil 2: Das Admin-Verzeichnis...

CMSms bietet die Möglichkeit zur eigenen Sicherheit das Verzeichnis zum Backend-Login umzubenennen.
Ihr könnt Euch sicherlich denken was passiert, wenn in einem Upgrade Änderungen an den Dateien des Adminverzeichnisses vorgenommen werden müssen. Da die Entwickler den Namen eures eigenen Adminverzeichnisses nicht kennen, enthält in diesem Falle jedes Upgrade das Standard Admin-Verzeichnis mit Namen "Admin".

In früheren Versionen wurde das damit quittiert, dass Ihr nun zwei Admin-Verzeichnisse hattet. Einmal das aktuelle und einmal euer altes. Beide können nicht richtig funktionieren, da das eine veraltete Dateien beinhaltet und das CMSms von dem anderen nichts weiß. (weil in der config.php ja noch euer altes Verzeichnis drinsteht)

Irgendwann (ich weiß nicht mehr seit wann das geändert wurde) wurde die config.php bei einem Upgrade einfach so abgeändert, dass wieder das Standard Admin-Verzeichnis eingetragen wurde, sodass wenigstens eines der beiden Verzeichnisse funktioniert.

Das funktioniert aber nur dann, wenn man das komplette Installationsarchiv auf den Server lädt. Denn bei den diff-Paketen sind ja nur die geänderten Dateien enthalten. Das führt dann dazu, dass euer (neues) Admin-Verzeichnis unvollständig ist.

Lange Rede, kurzer Sinn: am besten vor jedem Upgrade das Admin-Verzeichnis sowohl in config.php als auch den Namen des Verzeichnisses selbst wieder auf den Standardwert "admin" setzen.
Nach dem Upgrade könnt ihr es wieder umbenennen.
Oder umgekehrt, im Installationsarchiv schauen ob ein Admin-Verzeichnis mit dabei ist und vor dem Upload den Verzeichnisnamen an euer eigenes Admin-Verzeichnis anpassen. Nach dem Upgrade aber nicht vergessen, nochmal einen Blick in die config.php zu werfen und das dort eingetragene Admin-Verzeichnis zu überprüfen.
Last edited by NaN on Sun Aug 08, 2010 11:13 pm, edited 1 time in total.
nockenfell
Power Poster
Power Poster
Posts: 751
Joined: Fri Sep 12, 2008 2:34 pm
Location: Schweiz / Switzerland

Re: Allgemeine Hinweise zu Upgrades

Post by nockenfell »

Genau das umbenennen des Admin-Ordners habe ich in meinem CMSInstaller integriert:
http://forum.cmsmadesimple.org/index.ph ... #msg220148

Dies war einer der Punkte welcher mir bei den Updates zu mühsam war. Im Moment ist wieder eine neue Version des CMSInstallers in der Pipeline. Mal schauen wenn ich fertig damit werde.
[this message is written with 100% recycled bits]
NaN

Re: Allgemeine Hinweise zu Upgrades

Post by NaN »

Aus gegebenem Anlass:

Teil 3: Ich finde kein Update Paket zum Download :-\

Manchmal sind wo viele Änderungen nötig, dass ein extra Update Paket keinen Unterschied zu einem normalen Installationsarchiv hätte. Wenn ihr also ein Update auf eine Version vornehmen wollt deren Updatepaket ihr nicht finden könnt, ladet einfach das komplette Installationsarchiv auf Euren Server über die aktuelle Installation und führt die Adresse "eureDomain/install/upgrade.php" aus.
Locked

Return to “Installation und Einstellungen”