Update 4.10.x auf 6.0 CE bleibt im Maintenance-Modus hängen

Guten Morgen,

nachdem ich alle Register gezogen habe, wende ich mich nun doch vertrauensvoll ans Forum in der Hoffnung hier einen Lösungs-Ansatz zu erhalten.

Mich mit dem Composer anzufreunden war nicht schwer und auch ansonsten komme ich für gewöhnlich gut klar. Auf meinem Debian 8-Server lief bis dato Oxid 4.10.4 CE und das ist soweit auch okay. Nun habe ich im Sommer für einen Freund begonnen einen Shop zu erstellen und dieser soll nun zu Weihnachten produktiv gehen. Da nun die v6 released wurde dachte ich mir: Hmm, besser gleich das Update fahren, als später im Produktivbetrieb potentielle Ausfälle zu riskieren.

So habe ich also den ersten Testlauf ganz unethisch auf meinem Server gemacht und folgte der kurzen, knappen Instruktion:

• Verbinde Dich per SSH mit Deinem Webserver.
• Bewege Dich in’s DocRoot-Verzeichnis und führe folgendes Kommando aus:
composer create-project --no-dev oxid-esales/oxideshop-project my_oxid_eshop_project dev-b-6.0-ce
• Lass die Top-Level-Domain des Webservers auf das Verzeichnis source/ zeigen.
• Gib im Browser diese Domain ein.
• Führe alle Schritte der Setup-Routine durch.

Dies führte erst einmal zu SSL-Fehlern, also habe ich das letsencrypt-Zertifikat erneuert, die Konfigurations-Files des Servers (bind, etc.) nach Änderung des DocRoots neu schreiben lassen und die Maschine auch rebooted.

Aufruf der URL führt nun dazu, dass ich auf der Maintenance-Seite lande. Auch der direkte Aufruf von https://www.meineseite.de/Setup/index.php bringt den selben Effekt.

Nun gut, also von vorne: MAMP gestartet (ist XAMPP für MacOS) und dort eine Test-DB eingerichtet, einen MySQL-User angelegt und die entpackte Variante der v6 in den DocRoot gelegt. Aufruf mittels Browser führt mich automatisch auf die Setup-Seite und alles läuft sauber durch. Installation wie aus Vorgänger-Versionen ganz normal und abschließend die Resultat-Seite mit den Links zum Backend und zum Frontend.

Also gut: Gleiches Spiel von vorn. Alles vom Server mittels FTP gekickt, per SSH als root-User verbunden, Composer-Kommando ausgeführt, DocRoot mittels Serverpanel geändert auf das Verzeichnis ‘source’, Server-Config neu geschrieben, rebooted, hinterher per SSH noch chown -R auf das ‘my_oxid_eshop_project’-Verzeichnis, nur um sicherzustellen, dass mir der Eigentümer root nicht nen Riegel vorschiebt - leider selber Effekt.

Natürlich habe ich auch gelesen, dass man ‘untrusted sources’ Composer nicht als root/superuser ausführen soll, was ich hier aber getrost ignorierte.

Gerne liefere ich weitere Informationen, sofern aus meiner Schilderung noch nicht klar wird, woran es denn grundsätzlich liegen könnte. Ich bin trotz zwei Jahrzehnten auf X-Systemen am Ende meines Lateins…

Beste Grüße und vielen Dank!
Ralf

PHP 5.6?
Schau mal kurz in die Datenbank, wurden da die Views generiert?

Hast du schon mal die EXCEPTION.log bzw. PHP-Error-Log geprüft?

Hallo,

@vanilla_thunder: Unterliege ich da einem Denkfehler? Bei meiner lokalen Installationen wurden die SQL-Daten erst in einem Folgeschritt abgefragt. Ich habe die config.inc.php vorher nicht editiert - somit kann die Setup-Routine doch an sich keine Views generieren, da sie noch nicht weiss wohin und mit welchen Zugangsdaten? Oder sehe ich da was verkehrt…

Nachtrag: Wenn ich die config.inc.php manuell bearbeite und die entsprechenden Daten hinterlege, erscheint nur noch eine weiße Seite.

PHP-Version:

PHP 5.6.30-0+deb8u1 (cli) (built: Feb 8 2017 08:50:21)
Copyright © 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright © 1998-2016 Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright © 1999-2016, by Zend Technologies

@ProudCommerce: Im EXCEPTION_LOG.txt lässt sich die Ursache schon mal weiter eingrenzen:

[19 Dec 16:47:46.960555 2017] [uncaught error] [type E_USER_ERROR] [file /var/customers/webs/retroniks/my_oxid_eshop_project/source/bootstrap.php] [line 113] [code ] [message Error: Autoload file missing. Make sure you have run the ‘composer install’ command.]

Auch hier wieder die Frage: Wie kommt es dazu, denn bei der lokalen Installation bin ich genau nach Fahrplan vorgegangen, während es auf dem Host zu dieser Exception kommt…

Besten Dank und Grüße
Ralf

die Datenbank wird direkt nach dem Angeben der MySQL Zugangsdaten befüllt. config.inc.php wird erst hinterher geschrieben, wenn alles erfolgreich war.

mach mal composer update

composer update ausgeführt - einzige Änderung: Auf der Maintenance-Seite wird nun auch das oxid eshop Logo angezeigt.

[19 Dec 18:19:46.689377 2017] [uncaught error] [type E_USER_ERROR] [file /var/customers/webs/retroniks/my_oxid_eshop_project/source/bootstrap.php] [line 113] [code ] [message Error: Autoload file missing. Make sure you have run the ‘composer install’ command.]

Nun habe ich also das composer install-Kommando im ‘my_oxid_eshop_project’-Verzeichnis ausgeführt

root@v22017024316444989:/var/customers/webs/retroniks/my_oxid_eshop_project# composer install Do not run Composer as root/super user! See https://getcomposer.org/root for details Loading composer repositories with package information Installing dependencies (including require-dev) from lock file Nothing to install or update Package guzzle/common is abandoned, you should avoid using it. Use guzzle/guzzle instead. Package guzzle/stream is abandoned, you should avoid using it. Use guzzle/guzzle instead. Package guzzle/parser is abandoned, you should avoid using it. Use guzzle/guzzle instead. Package guzzle/http is abandoned, you should avoid using it. Use guzzle/guzzle instead. Generating autoload files Generating OXID eShop unified namespace classes ... Done > Incenteev\ParameterHandler\ScriptHandler::buildParameters Updating the "test_config.yml" file > if [ -f ./vendor/bin/oe-eshop-ide_helper ]; then oe-eshop-ide_helper; fi

mit dem Ergebnis, dass hier nun die Dateien

.ide-helper.php
test_config.yml

generiert wurden. Ansonsten alles beim Alten…

Diese Meldung kommt aus der bootstrap.php. Damit diese Meldung erscheint, muss folgendes in Zeile 102 erfüllt sein:

!is_readable(VENDOR_PATH . 'autoload.php'

An der Stelle könntest du dir VENDOR_PATH ausgeben lassen (ist normalerweise das vendor-Verzeichnis), schauen ob das richtig ist und ob dort eine autoload.php liegt, und falls ja warum sie nicht readable ist (Berechtigungen).

Hier bin ich nun stutzig… der VENDOR_PATH ist in der bootstrap.php überall nur mit . definiert, obwohl er sich ausserhalb des source-Verzeichnisses im Überordner ‘my_oxid_eshop_project’ befindet. Ausgehend vom source-Verzeichnis wäre er also “. .” - hmm.

Kann ich so nicht erkennen, VENDOR_PATH wird definiert als Unterordner vendor von INSTALLATION_ROOT_PATH, und INSTALLATION_ROOT_PATH ist das übergeordnete Verzeichnis von source. Liegt denn im Ordner vendor eine autoload.php und ist diese readable für den Apache-User?

Die autoload.php liegt im vendor-Verzeichnis und ich habe sie temporär auf 777 gesetzt - sollte also passen.

Hm, so wie es aussieht gibt dennoch !is_readable(VENDOR_PATH . ‘autoload.php’) true zurück, und da müsstest du mit etwas debuggen (mit var_dump den Inhalt von VENDOR_PATH und von is_readable(VENDOR_PATH . ‘autoload.php’ anzeigen etc.) versuchen herauszufinden woran das liegt.

lege mal eine test.php im Ordner mit dem Shop an:

<?php
echo $_SERVER["DOCUMENT_ROOT"] . " // " . $_SERVER["CONTEXT_DOCUMENT_ROOT"] . " ## " . $_SERVER["CONTEXT_PREFIX"];

und rufe sie im Browser auf.
Da sollten nun zwei Pfade link sind rechts vom // sichtbar sein. sind sie identisch?
Entsprechen sie dem Shop Pfad in der config.inc.php?
Und steht nach ## irgendwas?

Resultiert in:

/var/customers/webs/retroniks/my_oxid_eshop_project/source/ // /var/customers/webs/retroniks/my_oxid_eshop_project/source/ ##

Und noch mal als wichtige Info: Ich bekam von Anfang an nicht den Setup-Screen, sprich es wurde keinerlei Installation getriggert. Die Datenbank kann auch nichts enthalten, weder Views noch Tables, weil keine Zugangsdaten bisher an den Installer aus o.g. Gründen übermittelt wurden.

Bei der lokalen Installation hatte ich ganz regulär den Installations-Bildschirm, der die Prerequisites prüft, etc. - dies blieb auf dem V-Host aus, gleich zu Beginn erschien die Maintenance-Seite.

Hallo Ralf, hallo zusammen!

Wurde das Problem inzwischen gelöst? Ich habe nämlich aktuell genau das gleiche Problem wie Ralf. Das Verhalten ist bei mir exakt das Gleiche. Tritt sowohl bei Oxid CE 6.0 als auch 6.1.1 auf. Sowohl mit PHP 7.0 als auch mit PHP 7.1. Es kommt immer nur die Maintenance-Seite…

Die autoload.php ist im vendor-Verzeichnis vorhanden. Wenn ich mir mit var_dump den Inhalt von VENDOR_PATH anschaue ist der auch korrekt. is_readbale(VENDOR_PATH . ‘autoload.php’) ist allerdings false - ich habe aber keine Ahnung warum.

Der Hoster ist webgo.

Hat noch jemand eine Idee?

Viele Grüße
Romy

Mach dir vielleicht mal eine Testdatei in der du nur das Ergebnis von is_readable ausgibst, Pfad zu autoload.php dabei direkt reinschreiben. Wenn da auch false zurückkommt kannst du den Provider fragen ob er dafür eine Erklärung hat. Könnte etwa an Berechtigungen oder open basedir liegen.

Hallo leo,

vielen Dank, der Hinweis mit open_basedir war Gold wert! Ich habe das vendor-Verzeichnis zum open_basedir hinzugefügt, nun komme ich auch zum Installations-Screen.

Viele Grüße
Romy

1 Like