Anomalie #1236
closedEchec de l'installation de Galette sous PHP 7.3
100%
Description
Bonjour Johan,
Je ne suis pas sûr qu'il s'agisse d'un bug ou d'une mauvaise manipulation de ma part, mais dans le doute, je poste une issue.
J'ai essayé de déployer une nouvelle instance de Galette en version 0.9.2 et je suis tombé sur une page blanche lors de l'installation.
Quelques informations système :
- Debian Buster (Linux 4.19.0-1)
- Apache 2.4.37-1 + libapache PHP 7.3
- PHP 7.3.0-2, Zend Engine 3.3.0-dev avec Zend OPcache 7.3.0-2.
- Modules PHP 7.3 (installés via apt) : cli, common, curl, gd, interbase, intl, json, mbstring, mysql, odbc, opcache, pgsql, readline, tidy et xml.
- MariaDB 10.1.37-3
Les logs d'Apache, peu coopératifs, me disent :
[*****] [php7:error] [pid ****] [client 127.0.0.1:*****] PHP Fatal error: Uncaught Exception in /***/galette/lib/Galette/Core/Db.php:100 Stack trace: #0 /***/galette/includes/dependencies.php(188): Galette\\Core\\Db->__construct() #1 /***/galette/vendor/pimple/pimple/src/Pimple/Container.php(118): {closure}(Object(Slim\\Container)) #2 /***/galette/vendor/slim/slim/Slim/Container.php(123): Pimple\\Container->offsetGet('zdb') #3 /***/galette/vendor/slim/slim/Slim/Container.php(172): Slim\\Container->get('zdb') #4 /***/galette/includes/dependencies.php(193): Slim\\Container->__get('zdb') #5 /***/galette/vendor/pimple/pimple/src/Pimple/Container.php(118): {closure}(Object(Slim\\Container)) #6 /***/galette/vendor/slim/slim/Slim/Container.php(123): Pimple\\Container->offsetGet('preferences') #7 /***/galette/includes/dependencies.php(417): Slim\\Container->get('preferences') #8 /***/galette/vendor/pimple/pimple/src/Pimple/Container.php(118): {closure}(Object(Slim\\Container)) #9 /***/galette/vendor/slim/slim/Sli in /***/galette/lib/Galette/Core/Db.php on line 100
Il semblerait que ça soit en rapport avec la connexion à la base de données. J'ai pourtant les modules pgsql et mysql ainsi qu'un serveur MariaDB en arrière-plan.
Est-ce que ça n'aurait pas un lien avec ce breaking change de PHP 7.3 ?
https://secure.php.net/manual/en/migration73.incompatible.php#migration73.incompatible.pdo-mysql
J'ai déjà déployé auparavant une instance de Galette 0.9.1.2 qui marchait très bien sous PHP 7.0 (qui n'est cela dit plus supportée).
Merci pour ton formidable investissement.
Updated by Johan Cwiklinski over 5 years ago
- Status changed from Nouveau to Commentaire
L'erreur semble suggérer la présence d'un fichier de configuration qui ne soit pas d'équerre ; il faudrait vérifier ça dans le dossier config
de Galette. Tu parles de nouvelle installation, mais tu dis aussi avoir installé une version antérieure ; si ça a été fait au même endroit, le problème peut se poser.
Les tests qui sont lancés à chaque commit sur le dépôt tournent en PHP 7.1, 7.2 et 7.3. Il n'est pas exclu qu'il subsiste des soucis (tout n'est pas testé) ; mais dans l'ensemble, je suis en mesure d'affirmer que ça marche (donc pas de vraies « grosses » incompatibilités).
Updated by Nicolas Weinmann over 5 years ago
Mon instance précédente de Galette a été installée dans un dossier différent.
Dans le doute, je viens de recommencer la procédure d'installation.
(J'ai supprimé le dossier, téléchargé Galette 0.9.2, extrait l'archive, déplacé dans les dossiers de mon serveur puis effectué un "chown -R www-data:www-data config data".)
Enfin, j'ai redémarré le serveur Apache et tenté à nouveau d'ouvrir la page, hélas sans succès, page blanche avec la même erreur.
Il s'agit donc bien de la config vanilla.
Je suis à court de pistes...
Updated by Johan Cwiklinski over 5 years ago
Est-tu certain qu'il s'agisse bien de la toute première erreur ? (une pauvre notice avant peut aussi bien tout flinguer)
Je ne parviens pas à comprendre. La type de base de données est déterminé par la valeur renseignée dans le fichier de configuration, s'il en existe un, et ce n'est pas le cas. Dans ce cas de figure, soit l'installer envoie le type spécifié par l'utilisateur (au vu des détails fournis, pas sûr que ce soit arrivé jusque là).
Il faudrait l'erreur complète, dans la trace fournie, on ne sait pas qui demande à récupérer l'instance de la base.
Bien que je doute que ça change vraiment quelque chose, il faudrait tester avec la dernière archive nightly, voir si c'est toujours vrai.
Updated by Nicolas Weinmann over 5 years ago
Je viens d'essayer avec la nightly (et un joli chmod -R 777 sur tout le dossier de Galette histoire de s'assurer qu'il ne s'agisse pas d'un problème de permissions).
J'ai exactement le même résultat : il n'y a qu'une seule ligne qui s'affiche dans error.log (et rien d'autre), c'est la stack trace que j'ai écrite sur mon premier post.
Si je rafraîchis la page, exactement la même ligne s'ajoute à la suite dans les logs d'erreur.
Quand je regarde access.log, j'ai trois entrées :
127.0.0.1 - - [18/Jan/2019:13:30:45 +0100] "GET / HTTP/1.1" 302 235 "-" "(***User-Agent***)" 127.0.0.1 - - [18/Jan/2019:13:30:45 +0100] "GET /webroot/index.php HTTP/1.1" 302 232 "-" "(***User-Agent***)" 127.0.0.1 - - [18/Jan/2019:13:30:45 +0100] "GET /webroot/installer.php HTTP/1.1" 500 295 "-" "(***User-Agent***)"
Finalement, j'ai testé avec Galette 0.9.1.2 sans changer ma version de PHP et le bug ne se reproduit pas, j'ai bien accès au menu de configuration où Galette me signale que tous les prérequis sont respectés.
Je vais donc partir sur cette version en attendant que ce bug soit résolu.
Si tu n'arrives pas à reproduire le bug et que tu as besoin de quelqu'un pour tester, je suis à ta disposition.
Updated by Johan Cwiklinski over 5 years ago
Nicolas Weinmann a écrit :
Je viens d'essayer avec la nightly (et un joli chmod -R 777 sur tout le dossier de Galette histoire de s'assurer qu'il ne s'agisse pas d'un problème de permissions).
Beurk.
Finalement, j'ai testé avec Galette 0.9.1.2 sans changer ma version de PHP et le bug ne se reproduit pas, j'ai bien accès au menu de configuration où Galette me signale que tous les prérequis sont respectés.
Je vais donc partir sur cette version en attendant que ce bug soit résolu.
Si tu n'arrives pas à reproduire le bug et que tu as besoin de quelqu'un pour tester, je suis à ta disposition.
Non, je ne parviens pas à reproduire. Le bout de code incriminé est assez facile à comprendre source:galette/lib/Galette/Core/Db.php#L95 :
- soit le type est MYSQL ou PGSQL, soit il est inconnu et provoque une erreur,
- le type est déterminé soit par une constante dans le fichier de configuration (qui n'existe qu'après installation), soit par la chaine de connexion fournie (typiquement, lors de l'installation, mais uniquement après que les identifiants aient été demandés).
Je ne m'explique pas que tu te retrouves avec un type inconnu :/ Il faudrait glaner davantage d'informations :
diff --git a/galette/lib/Galette/Core/Db.php b/galette/lib/Galette/Core/Db.php
index 5d23765c..e32bb300 100644
--- a/galette/lib/Galette/Core/Db.php
+++ b/galette/lib/Galette/Core/Db.php
@@ -97,7 +97,7 @@ class Db
} elseif ($_type_db === self::PGSQL) {
$_type = 'Pdo_Pgsql';
} else {
- throw new \Exception;
+ throw new \Exception("Type $_type_db not known (dsn: $_user_db@$_host_db(:$_port_db)/$_name_db)");
}
$this->type_db = $_type_db;
On verra dans l'exception ce qui est défini, ça pourra peut-être aider.
Updated by Nicolas Weinmann over 5 years ago
J'obtiens ceci :
[Sat Jan 26 13:44:57 2019] [php7:error] [pid *] [client 127.0.0.1] PHP Fatal error: Uncaught Exception: Type TYPE_DB not known (dsn: USER_DB@HOST_DB(:PORT_DB)/NAME_DB) in */galette/lib/Galette/Core/Db.php:100 Stack trace: #0 */galette/includes/dependencies.php(188): Galette\\Core\\Db->__construct() #1 */galette/vendor/pimple/pimple/src/Pimple/Container.php(118): {closure}(Object(Slim\\Container)) #2 */galette/vendor/slim/slim/Slim/Container.php(123): Pimple\\Container->offsetGet('zdb') #3 */galette/vendor/slim/slim/Slim/Container.php(172): Slim\\Container->get('zdb') #4 */galette/includes/dependencies.php(193): Slim\\Container->__get('zdb') #5 */galette/vendor/pimple/pimple/src/Pimple/Container.php(118): {closure}(Object(Slim\\Container)) #6 */galette/vendor/slim/slim/Slim/Container.php(123): Pimple\\Container->offsetGet('preferences') #7 */galette/includes/dependencies.php(417): Slim\\Container->get('preferences') #8 */galette/vendor/pimple/pimple/src/Pimple/Container.php(118): {closure}(Object(Slim\\Container)) #9 */galette in */galette/lib/Galette/Core/Db.php on line 100
Il serait peut-être utile de préciser que jusque-là, la base de données n'est pas encore configurée (puisqu'on est censé la configurer pendant l'installation via l'interface web qui, justement, ne s'affiche pas).
Updated by Johan Cwiklinski over 5 years ago
OK, il semble donc que ce soit finalement bel et bien OK de ce côté là ; mais l'application tente une connexion à la base alors qu'il n'y a pas lieu. J'avoue que je ne comprends pas ce qui se passe :/
Quelle est l'URl de la page qui foire ? C'est le index.php
ou le installer.php
qui renvoie l'erreur ?
Updated by Johan Cwiklinski over 5 years ago
Autre question, la trace que tu fourni, c'est totu ce qui'l y a ? Rien d'autre avant ou après (des simples "notices" peuvent parfois avoir un effet désastreux).
Updated by Nicolas Weinmann over 5 years ago
C'est l'installer qui renvoie l'erreur.
Comme je le disais, je suis d'abord redirigé de la racine à webroot/index.php, puis de cette page à webroot/installer.php. (access.log).
Aucune autre information n'est enregistrée dans error.log avant ou après l'erreur, pas même une notice.
Updated by Guillaume Delaunay over 5 years ago
Bonjour
pour info je suis hébergé chez Gandi avec un abonnement simple hosting et je retrouve les memes symptomes.
La version 0.9.1.2 fonctionne correctement mais la maj en 0.9.2.1 me pose les memes problemes.
C'est le passage de la 9.1 a la 9.2 qui pose problème.
Tous les pré-requis php semblent remplis !
sur mon xampp tout passe (après avoir remodifié mon php.ini entre les versions) mais en ligne chez Gandi ca ne passe plus.
Si ca peut aider !
Updated by Guillaume Delaunay over 5 years ago
Pour compléter PHP 7.3 MySQL 5.7 pack S si vous avez la possibilité de reproduire
Updated by Bill OUT over 5 years ago
Bonjour à tous,
Je trouve la même erreur sur mes installations qui sont similaires à celles citées plus haut.
Je pense aussi que ça vient de la connexion vers la BDD. Je fouille de mon côté et ne manquerai pas de vous faire part de mes trouvailles le cas échéant...
Updated by Bill OUT over 5 years ago
Je rajoute que quand le fichier config.inc.php est en place, galette reste bloqué sur la page qui demande de lancer la procédure de mise à jour la base de données. Si je rajoute "install" à la fin de mon url, c'est la même chose. Si je vais directement sur "installer.php", il me renvoie la page blanche avec la même erreur que Nicolas Weinmann message #6.
Updated by Johan Cwiklinski over 5 years ago
Je ne reproduit pas, et je n'ai pas accès à un hébergement qui pose problème... Difficile de résoudre le problème dans ces conditions :/
Updated by Johan Cwiklinski over 5 years ago
- Status changed from Commentaire to Résolu
- % Done changed from 0 to 100
Appliqué par commit e68e8eeefe5192417cf5979dbdb6e64f1138dcf7.
Updated by Johan Cwiklinski over 5 years ago
Je pense avoir trouvé une correctif, mais je ne peux pas tester... :-)
Voir e68e8eeefe5192417cf5979dbdb6e64f1138dcf7 ; le correctif se situe aux lignes 412 et 417/418.
Merci de tester et me dire si ça corrige le problème (je pense que ça devrait être bon ;)).
J'ai également mis à jour la nightly avec ce correctif à l'instant.
Updated by Nicolas Weinmann over 5 years ago
Et paf ! Testé et fonctionnel chez moi avec la dernière nightly. Bravo et merci :)
Updated by Johan Cwiklinski over 5 years ago
- Category set to Core
- Status changed from Résolu to Fermé
- Assignee set to Johan Cwiklinski
- Target version set to 0.9.3
Chouette, merci d'avoir testé :=)
Updated by Xavier MAILLARD over 5 years ago
Guillaume Delaunay a écrit :
Bonjour
pour info je suis hébergé chez Gandi avec un abonnement simple hosting et je retrouve les memes symptomes.
La version 0.9.1.2 fonctionne correctement mais la maj en 0.9.2.1 me pose les memes problemes.
C'est le passage de la 9.1 a la 9.2 qui pose problème.
Tous les pré-requis php semblent remplis !
sur mon xampp tout passe (après avoir remodifié mon php.ini entre les versions) mais en ligne chez Gandi ca ne passe plus.
Si ca peut aider !
Idem ici. La nightly ne fonctionne pas non plus :/
Je vais remonter tout le fil pour essayer de comprendre la solution.
Updated by Guillaume Delaunay over 5 years ago
Je confirme moi aussi. J'ai tenté la nightly mais pas mieux.
Je bloque toujours en page blanche sur le /webroot/installer.php via firefox et en HTTP ERROR 500 sur Chrome
Updated by Johan Cwiklinski over 5 years ago
L'erreur doit être différente en ce cas, il faut voir les logs.
Updated by Guillaume Delaunay over 5 years ago
En fait le fichier dependenties.php fonctionne en partie.
Si on installe directement la 9.2.1 ou si on met à jour la 9.1.2 vers 9.2.1 on peut grace à la modification du fichier faire toute l'étape d'installation dont la mise à jour (ou la création) de la base jusqu'au bout.
Arrivée à l'étape finale ou l'on doit supprimer le dossier install c'est terminé.
La page /webroot/index.php renvoi une page blanche (avec firefox) ou err 500 (avec chrome).
(et avec la maj de la base on ne peut plus revenir en arrière en 9.1.2)
Updated by Nicolas Weinmann over 5 years ago
Mea culpa. Je n'avais pas eu le temps de tester jusqu'au bout.
Le bug de la page blanche au début de l'installation a en effet été résolu, mais il revient à la fin de l'installation.
Stack trace.
[php7:error] [pid] [client 127.0.0.1] PHP Fatal error: Uncaught Slim\\Exception\\ContainerValueNotFoundException: Identifier "mode" is not defined. in */galette/vendor/slim/slim/Slim/Container.php:120 Stack trace: #0 */galette/includes/dependencies.php(412): Slim\\Container->get('mode') #1 */galette/vendor/pimple/pimple/src/Pimple/Container.php(118): {closure}(Object(Slim\\Container)) #2 */galette/vendor/slim/slim/Slim/Container.php(123): Pimple\\Container->offsetGet('cache') #3 */galette/includes/dependencies.php(452): Slim\\Container->get('cache') #4 */galette/vendor/pimple/pimple/src/Pimple/Container.php(118): {closure}(Object(Slim\\Container)) #5 */galette/includes/dependencies.php(464): Pimple\\Container->offsetGet('translator') #6 */galette/includes/main.inc.php(128): require('/var/www/galett...') #7 */galette/webroot/index.php(58): require_once('/var/www/galett...') #8 {main} thrown in */galette/vendor/slim/slim/Slim/Container.php on line 120
Base de données MYSQL, mise à jour de Galette à partir d'une installation existante.
Il n'y a pas eu de problème durant l'étape d'installation.
Updated by Johan Cwiklinski over 5 years ago
Nicolas Weinmann a écrit :
Stack trace.
[...]
Essaies ça :
diff --git a/galette/includes/main.inc.php b/galette/includes/main.inc.php index 88a42883..ff0f6d5f 100644 --- a/galette/includes/main.inc.php +++ b/galette/includes/main.inc.php @@ -94,7 +94,8 @@ if ($needs_update) { 'path' => GALETTE_LOGS_PATH . '/galette_slim.log', ], //'routerCacheFile' => (GALETTE_MODE === 'DEV') ? false : GALETTE_CACHE_DIR . '/fastroute.cache' //disabled until properly handled - ] + ], + 'mode' => 'PROD' ] ); }
Updated by Xavier MAILLARD over 5 years ago
Johan Cwiklinski a écrit :
Nicolas Weinmann a écrit :
Stack trace.
[...]Essaies ça :
[...]
Avec ce patch supplementaire, je passe en 0.9.2.1.
En résumé: il faut les 2 patchs pour moi.
Pour la -dev, il y a fort à parier que ce dernier patch soit la solution vu que j'ai la même stack que Nicolas #23
Bonne nouvelle !
Updated by Guillaume Delaunay over 5 years ago
Désolé j'ai pas compris comment appliquer le patch pour tester.
Je les mets ou les lignes de code ?
Updated by Johan Cwiklinski over 5 years ago
Guillaume Delaunay a écrit :
Désolé j'ai pas compris comment appliquer le patch pour tester.
Je les mets ou les lignes de code ?
--- a/galette/includes/main.inc.php
+++ b/galette/includes/main.inc.php
^ le fichier changé est includes/main.inc.php
@@ -94,7 +94,8 @@ if ($needs_update) {
^ le contexte du patch commence à la ligne 94 (etc).
Le patch a été commité et la nightly mise à jour de toutes façons ;)
Updated by Guillaume Delaunay over 5 years ago
Je confirme.
Le nouveau fichier dependenties.php permet de faire l'installation/mise à jour dont la BDD.
Le nouveau fichier main.inc.php permet d'afficher les pages après install.
Merci !