Projet

Général

Profil

Actions

Anomalie #1236

fermé

Echec de l'installation de Galette sous PHP 7.3

Ajouté par Nicolas Weinmann il y a presque 6 ans. Mis à jour il y a presque 6 ans.

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

100%

Temps estimé:
Version utilisée:

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.

Mis à jour par Johan Cwiklinski il y a presque 6 ans

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

Mis à jour par Nicolas Weinmann il y a presque 6 ans

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

Mis à jour par Johan Cwiklinski il y a presque 6 ans

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.

Mis à jour par Nicolas Weinmann il y a presque 6 ans

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.

Mis à jour par Johan Cwiklinski il y a presque 6 ans

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.

Mis à jour par Nicolas Weinmann il y a presque 6 ans

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

Mis à jour par Johan Cwiklinski il y a presque 6 ans

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 ?

Mis à jour par Johan Cwiklinski il y a presque 6 ans

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

Mis à jour par Nicolas Weinmann il y a presque 6 ans

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.

Mis à jour par Guillaume Delaunay il y a presque 6 ans

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 !

Mis à jour par Guillaume Delaunay il y a presque 6 ans

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

Mis à jour par Bill OUT il y a presque 6 ans

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

Mis à jour par Bill OUT il y a presque 6 ans

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.

Mis à jour par Johan Cwiklinski il y a presque 6 ans

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 :/

Mis à jour par Johan Cwiklinski il y a presque 6 ans

  • Statut changé de Commentaire à Résolu
  • % réalisé changé de 0 à 100

Mis à jour par Johan Cwiklinski il y a presque 6 ans

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.

Mis à jour par Nicolas Weinmann il y a presque 6 ans

Et paf ! Testé et fonctionnel chez moi avec la dernière nightly. Bravo et merci :)

Mis à jour par Johan Cwiklinski il y a presque 6 ans

  • Catégorie mis à Core
  • Statut changé de Résolu à Fermé
  • Assigné à mis à Johan Cwiklinski
  • Version cible mis à 0.9.3

Chouette, merci d'avoir testé :=)

Mis à jour par Xavier MAILLARD il y a presque 6 ans

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.

Mis à jour par Guillaume Delaunay il y a presque 6 ans

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

Mis à jour par Johan Cwiklinski il y a presque 6 ans

L'erreur doit être différente en ce cas, il faut voir les logs.

Mis à jour par Guillaume Delaunay il y a presque 6 ans

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)

Mis à jour par Nicolas Weinmann il y a presque 6 ans

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.

Mis à jour par Johan Cwiklinski il y a presque 6 ans

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'
         ]
     );
 }

Mis à jour par Xavier MAILLARD il y a presque 6 ans

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 !

Mis à jour par Guillaume Delaunay il y a presque 6 ans

Désolé j'ai pas compris comment appliquer le patch pour tester.
Je les mets ou les lignes de code ?

Mis à jour par Johan Cwiklinski il y a presque 6 ans

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

Mis à jour par Guillaume Delaunay il y a presque 6 ans

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 !

Actions

Formats disponibles : Atom PDF