Projet

Général

Profil

Anomalie #1236

Echec de l'installation de Galette sous PHP 7.3

Ajouté par Nicolas Weinmann il y a environ un mois. Mis à jour il y a 5 jours.

Statut:
Commentaire
Priorité:
Normal
Assigné à:
-
Catégorie:
-
Version cible:
-
Début:
16/01/2019
Echéance:
% réalisé:

0%

Temps estimé:
Version utilisée:
Vote:

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.

Historique

#1

Mis à jour par Johan Cwiklinski il y a 30 jours

  • Statut changé de Nouveau à 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).

#2

Mis à jour par Nicolas Weinmann il y a 29 jours

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...

#3

Mis à jour par Johan Cwiklinski il y a 29 jours

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.

#4

Mis à jour par Nicolas Weinmann il y a 28 jours

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.

#5

Mis à jour par Johan Cwiklinski il y a 22 jours

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.

#6

Mis à jour par Nicolas Weinmann il y a 20 jours

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).

#7

Mis à jour par Johan Cwiklinski il y a 20 jours

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 ?

#8

Mis à jour par Johan Cwiklinski il y a 20 jours

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).

#9

Mis à jour par Nicolas Weinmann il y a 20 jours

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.

#10

Mis à jour par Guillaume Delaunay il y a 7 jours

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 !

#11

Mis à jour par Guillaume Delaunay il y a 7 jours

Pour compléter PHP 7.3 MySQL 5.7 pack S si vous avez la possibilité de reproduire

#12

Mis à jour par Bill OUT il y a 6 jours

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...

#13

Mis à jour par Bill OUT il y a 5 jours

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.

Formats disponibles : Atom PDF