[Framaforms] problème installation

Bonjour,
Tout d’abord merci pour votre travail.
J’ai une question concernant l’installation détaillée ici : Framasoft / framaforms · GitLab

Une fois les étapes terminées j’ai systématiquement des erreurs qui m’empêchent d’accèder au site .

Notice : Undefined index: schema_fields_sql in /var/www/framaforms/includes/entity.inc on line 298

Warning : Invalid argument supplied for foreach() in /var/www/framaforms/sites/all/modules/entity/includes/entity.controller.inc on line 259

Warning : Invalid argument supplied for foreach() in /var/www/framaforms/sites/all/modules/entity/includes/entity.controller.inc on line 259

Warning : Invalid argument supplied for foreach() in /var/www/framaforms/sites/all/modules/entity/includes/entity.controller.inc on line 259

Warning : Invalid argument supplied for foreach() in /var/www/framaforms/sites/all/modules/entity/includes/entity.controller.inc on line 259

Warning : Invalid argument supplied for foreach() in /var/www/framaforms/sites/all/modules/entity/includes/entity.controller.inc on line 259

Warning : Invalid argument supplied for foreach() in /var/www/framaforms/sites/all/modules/entity/includes/entity.controller.inc on line 259

Warning : Invalid argument supplied for foreach() in /var/www/framaforms/sites/all/modules/entity/includes/entity.controller.inc on line 259

J’ai remarqué que le tuto d’installation parle d’un user de base de données appelé framaforms_user mais le dump qu’on importe utilise un utilisateur betaforms.

J’ai donc essayé le tuto en utilisant plutôt un utilisateur de base de données nommé betaforms en lieu et place de framaforms_user.

Ca ne change rien.

En outre je ne comprends pas à quoi sert cette partie :

  • create a directory and give it write permission (but not read permission). E.g: /path/to/framaforms_private_files/

Ne manque t’il pas des éléments de configuration à changer pour faire référence à /framaforms_private_files/, de quoi s’agit-il ?

Merci pour votre aide,

1 « J'aime »

Bonjour,
alors dans l’ordre :

  • L’erreur type Undefined index: schema_fields_sql in /var/www/framaforms/includes/entity.inc on line 298 reste encore un mystère pour moi, je n’ai pas encore eu le temps de vraiment comprendre d’où elle venait.
    En revanche on peut facilement l’ignorer : je vous conseille d’installer l’outil en ligne de commande drush, qui permet d’exécuter tout un tas de commandes utiles facilement (installation/update de module Drupal par exemple). Pour l’installation, suivre cette doc (installer Drush 8 pour cette version de Drupal).
    Vous pourrez ensuite exécuter drush cc all, qui nettoie les caches. Normalement, en rechargeant le site, les erreurs n’apparaissent plus (mais apparaissent en log).

  • pour la base de données, il faut d’abord créer une BDD PostgreSQL en local, nommées framaforms, avec l’utilisateur framaforms_user. Cet article Medium bien comment faire (il faut créer l’utilisateur, ne pas oublier le grant all). C’est ces informations qui importeront par la suite. Ensuite, on importe le dump dans la BDD qu’on vient de créer avec la commande indiquée dans le README :
    psql -U framaforms_user -W -h 127.0.0.1 framaforms < /path/to/framaforms.sql.
    Pour finir, modifier le fichier settings.php pour que le user/mdp colle à ce que vous avez créé dans PostgreSQL.

  • L’utilité du dossier framaforms_private est en effet assez mal expliquée dans le README, je pense à le mettre à jour bientôt ^^ C’est un dossier dont Drupal a besoin pour stocker des fichiers utilisateurs. Il faut le créer à côté de votre racine framaforms (autrement dit, si votre serveur HTTP pointe sur path/to/framaforms, il faut créer path/to/framaforms_private).
    Puis lui donner les bonnes autorisation et le bon propriétaire :

    • chown -R www-data framaforms_private (dans le cas de NGINX)
    • chmod -R 200 framaforms_private

Bonne chance ! Pour info, un travail est en cours pour faciliter l’installation de framaforms, mais ça reste faisable.

1 « J'aime »

Bonjour et merci d’avoir pris le temps de me répondre.

J’avais bien suivi le tutorial à la lettre et installé la base postgres framaforms et créé l’utilisateur framaforms_user (ce n’est pas un problème de droits car j’ai fait le tuto plusieurs fois, avec framaforms_user en superuser même). J’avais modifié le fichier settings également. J’avais bien créé le répertoire au bon endroit de l’arborescence et mis ses droits comme il faut (et le owner à www-data). Par contre à la fin j’avais les erreurs php + erreur 500 du server donc j’ai fini par laisser tomber.

J’attire quand même votre attention sur le fait que le dump de base qu’on importe fait référence à un utilisateur « betaforms » Par exemple :

ALTER TABLE menu_router OWNER TO betaforms;

Enfin pas sûre que mon dysfonctionnement soit lié à ça car comme je le disais j’ai refait le tuto avec l’utilisateur betaforms à la place et ça ne marchait pas davantage. J’ai aussi essayé de refaire le tuto de base et de changer le owner des objets qui avait pour propriétaire betaforms à framaforms_user dans postgres mais ça n’a rien changé. Le site ne marchait toujours pas à la fin.

Bref, j’ai fini par passer par l’installeur de drupal et webform pour monter mon site et ça remplit mon besoin. C’était plus pour vous faire un retour sur le tuto que je n’ai pas réussi à faire marcher chez moi.

par contre dans le tuto vous dites

create a directory and give it write permission (but not read permission). E.g: /path/to/framaforms_private_files/

c’est l’inverse du coup (pour read/write) si c’est 755 ?

(après je sais pas si c’est un détail mais dans le tuto c’est framaforms_private_files pas framaforms_private)

j’avoue ne pas comprendre comment ça marche car si je grep -r « framaforms_private » . dans le source je n’ai de référence à ça que dans le readme.

Pour info, la procédure pour obtenir ce dump est décrite ici. En fait je pense que cette instruction ALTER TABLE n’est pas prise en compte quand on l’importe dans une base PostgreSQL déjà créée avec son owner. À titre d’exemple, de mon côté en local, l’owner reste l’utilisateur postgres, mais ça ne pose pas de problème dans la mesure où on fait le GRANT ALL to framaforms_user derrière.
Je pense qu’il faudrait supprimer cette instruction du dump en réalité.

Donc effectivement, je ne pense pas que ce soit la source de votre problème, je chercherai plus du côté des logs NGINX et PHP pour résoudre l’erreur.

Oops, j’ai parlé trop vite pour les permissions, j’édite mon message d’avant. (Je donnais des permissions trop large de mon côté, pas sécu sécu).
Le README vient d’être mis à jour sur le repo git avec les bonnes permissions et le bon nom de dossier.

Pour le nom du dossier, il y a effectivement un problème sur la doc : il faut créer le fichier framaforms_private.
Le nom de fichier est défini dans une variable en BDD, pas dans un fichier de conf, donc normal que tu ne le trouve pas. Dans le dump elle est définie à framaforms_private, donc c’est comme ça qu’il faut l’appeler. On peut la changer par la suite depuis l’interface admin si on veut placer le système de fichier à un autre endroit de son système (à l’url monsite.org/admin/config/media/file-system).

Ok merci. Vu ce que tu me dis j’imagine que c’est le delta entre « framaforms_private » et framaforms_private_files qui mettait mon nginx en erreur (c’est con qu’il n’y avait pas de logs explicites dans nginx pour me permettre de le diagnostiquer…). En effet, j’avais vu que le user « betaforms » venait de tuto de migrations.

Désolée, je ne vais pas retester le tuto sur mon serveur maintenant que j’ai réussi à installer drupal/webform :smiley: mais c’est cool pour les corrections, merci de ta réactivité. Si j’ai besoin de réinstaller je retesterai.

Pas de soucis, merci de tes retours en tout cas !
On a un travail à faire sur la doc, et c’est vrai que l’installation est pas facile. On travaille à la faciliter en ce moment.

Super :+1:dans cette logique un docker pourrait être intéressant. Je sais pas ce que vous en pensez.

Adieu a totes,
Je me permets d’intervenir car je suis la discussion (essayant d’installer Framaforms sur un serveur mutualisé). Pas seulement une image Docker pour mon cas.
Je constate qu’il existe la possibilité d’installer en 1 clic déjà Framadate via Softaculous (c’est le cas dans les hébergements o2switch.fr). Si c’était possible de faire de même pour Framaforms, ça permettrait de multiplier les instances facilement.
Cordialement,
Thierry

Docker, Softaculous, Yunohost, il y aurait plein de solutions pour packager le bazar et faciliter l’installation, mais ça demanderait beaucoup de temps pour maintenir le paquet dans le temps. Et c’est un temps que Framasoft n’a malheureusement pas.
Pour le moment l’idée est plutôt d’essayer de faciliter l’installation avec ce que propose Drupal (distributions, profils d’installation, etc), et d’améliorer la doc. Mais si quelqu’un se sent de proposer un package, libre à lui ou elle !

1 « J'aime »

Bonjour,

D’abord, merci bcp pour ces outils et pour le travail fourni.
J’avais essayé il y a quelques mois d’installer framaforms à partir des infos du README et je n’étais pas arrivé à une solution fonctionnelle (et désolé de ne pas avoir remonté le problème à l’époque, merci @emilie de l’avoir fait).
C’est cool d’avoir repris le travail sur le sujet et clarifié le README et le Wiki.

J’ai repris là ou @emilie s’est arrêtée en reprenant l’installation. J’ai utilisé Apache au lieu de Nginx. Je testerai avec Nginx mais je ne pense pas que le problème vienne de là (Apache utilise aussi le user www-data).

  • Selon moi, il reste une coquille dans la procédure d’installation dans le Wiki

    • dans la section 4 Create a private folder:
    git clone https://framagit.org/framasoft/framaforms.git`
    chown -R www-data:www-data sites/default/files
    chmod -R 600 sites/default/files
    cd ..
    mkdir framaforms_private
    chown -R www-data:www-data framaforms_private
    chmod -R 200 framaforms_private
    

    Il y a un ` en trop à la fin de la ligne du git clone
    Sans ce `, git clone va cloner dans un sous-dossier framaforms, donc la suite des commandes ne passe pas. Comme juste au dessus il est indiqué de se mettre dans le « web directory », je suggère de cloner localement ainsi:
    git clone https://framagit.org/framasoft/framaforms.git .
    et le reste des commandes passera

  • Malgré ça, j’ai toujours des erreurs. Lorsque je me connecte la 1ère fois, j’ai ça


    Voici les erreurs remontées dans mon log Apache error.log

    [Tue Mar 24 17:53:32.605085 2020] [:error] [pid 852] [client 10.0.2.2:57828] PHP Warning:  Invalid argument supplied for foreach() in /var/www/html/sites/all/modules/entity/includes/entity.controller.inc on line 259
    [Tue Mar 24 17:53:32.605338 2020] [:error] [pid 852] [client 10.0.2.2:57828] PHP Warning:  Invalid argument supplied for foreach() in /var/www/html/sites/all/modules/entity/includes/entity.controller.inc on line 259
    ...
    [Tue Mar 24 17:53:32.609653 2020] [:error] [pid 852] [client 10.0.2.2:57828] PHP Warning:  Invalid argument supplied for foreach() in /var/www/html/sites/all/modules/rules/includes/rules.core.inc on line 56
    [Tue Mar 24 17:53:32.609696 2020] [:error] [pid 852] [client 10.0.2.2:57828] PHP Notice:  Trying to get property of non-object in /var/www/html/sites/all/modules/rules/includes/rules.core.inc on line 61
    [Tue Mar 24 17:53:32.609704 2020] [:error] [pid 852] [client 10.0.2.2:57828] PHP Warning:  Attempt to assign property of non-object in /var/www/html/sites/all/modules/rules/includes/rules.core.inc on line 61
    [Tue Mar 24 17:53:32.609708 2020] [:error] [pid 852] [client 10.0.2.2:57828] PHP Notice:  Trying to get property of non-object in /var/www/html/sites/all/modules/rules/includes/rules.core.inc on line 62
    [Tue Mar 24 17:53:32.609712 2020] [:error] [pid 852] [client 10.0.2.2:57828] PHP Warning:  Attempt to assign property of non-object in /var/www/html/sites/all/modules/rules/includes/rules.core.inc on line 62
    [Tue Mar 24 17:53:32.609715 2020] [:error] [pid 852] [client 10.0.2.2:57828] PHP Notice:  Trying to get property of non-object in /var/www/html/sites/all/modules/rules/includes/rules.core.inc on line 63
    ...
    [Tue Mar 24 17:53:32.612788 2020] [:error] [pid 852] [client 10.0.2.2:57828] PHP Warning:  Attempt to assign property of non-object in /var/www/html/modules/rdf/rdf.module on line 412
    ...
    [Tue Mar 24 17:53:32.859377 2020] [:error] [pid 854] [client 10.0.2.2:57830] PHP Warning:  Attempt to assign property of non-object in /var/www/html/modules/rdf/rdf.module on line 412, referer: http://localhost:8890/
    [Tue Mar 24 17:53:32.957726 2020] [core:error] [pid 853] (13)Permission denied: [client 10.0.2.2:57832] AH00035: access to /sites/default/files/Framasoft_Logo.svg.png denied (filesystem path /var/www/html/sites/default/files/Framasoft_Logo.svg.png) because search permissions are missing on a component of the path, referer: http://localhost:8890/
    

    Une idée?

    • Dans la section 1 prerequisites:
      J’ai essayé de continuer malgré mes problèmes, en ne configurant pas la bdd dans le settings.php, je suis arrivé sur la page de configuration de Drupal. Dans la phase « Verify Requirements », une erreur est remontée demandant d’installer les modules PHP DOM, SimpleXml, Xml et gd.

Bienvenue Aym,
J’ai exactement le même message d’erreur avec le message « Le fichier n’a pas pu être créé. » qui se répète. Voir ce fil aussi : [Framaforms] Installation sur serveur mutualisé o2switch?
Cordialement,

Thierry

Salut,
J’avais les mêmes erreurs PHP mais d’après thelem ce n’est pas forcément bloquant. Par contre le problème doit être ça :

[Tue Mar 24 17:53:32.957726 2020] [core:error] [pid 853] (13)Permission denied: [client 10.0.2.2:57832] AH00035: access to /sites/default/files/Framasoft_Logo.svg.png denied (filesystem path /var/www/html/sites/default/files/Framasoft_Logo.svg.png) because search permissions are missing on a component of the path, referer: http://localhost:8890

Peut-être que tu peux réessayer la procédure en appliquant ces droits-là pour voir :
https://www.latrach.net/drupal-8-recapitulatif-droit-sur-fichiers-avant-apres-installation

à ta place je tenterais :

chmod 755 sites/default

chmod 644 sites/default/settings.php

chmod 755 sites/default/files

chmod 555 sites/default

chmod 444 sites/default/settings.php

Bon courage

1 « J'aime »

@thelem : tu es vraiment sûr que c’est " framaforms_private" dans la base de données ?

oui c’est ça

733a32373a222f7661722f7777772f6672616d61666f726d735f70726976617465223b => « /var/www/framaforms_private » en utf-8

par contre du coup ton framaforms_private doit être directement à la racine de /var/www @Aym-1, est-ce que c’est le cas ?

Salut,

par contre du coup ton framaforms_private doit être directement à la racine de /var/www @Aym-1, est-ce que c’est le cas ?

Oui c’est bien ce que j’ai.

Peut-être que tu peux réessayer la procédure en appliquant ces droits-là pour voir :
https://www.latrach.net/drupal-8-recapitulatif-droit-sur-fichiers-avant-apres-installation

Ce qui change ici, ce sont les droits 755 sur sites/default/files, puisque j’avais 600 comme documenté dans le Wiki. J’ai donc essayé avec 755.
Lorsque je lance l’application, j’ai toujours

Erreur

Le site Web a rencontré une erreur inattendue. Veuillez essayer de nouveau plus tard.

Mais je n’ai plus les erreurs dessous Le fichier n'a pas pu être créé.

Dans le error.log Apache, j’ai encore les warnings foreach(), mais on ignore donc.
Il me reste les erreurs suivantes

[Tue Mar 24 21:31:08.513382 2020] [:error] [pid 95] [client 172.17.0.1:43302] PHP Notice:  Undefined index: schema_fields_sql in /var/www/html/includes/entity.inc on line 298, referer: http://localhost:8888/
...
[Tue Mar 24 21:31:08.516835 2020] [:error] [pid 95] [client 172.17.0.1:43302] PHP Notice:  Undefined index: schema_fields_sql in /var/www/html/sites/all/modules/rules/includes/rules.core.inc on line 56, referer: http://localhost:8888/

J’ai aussi oublié de préciser une chose. Lorsque j’importe le sql dans la base, je vois passer quelques erreurs ERROR: role "betaforms" does not exist.

@ThierryM J’ai lu ton fil de discussion aussi. Concernant l’erreur sur le module Polling, j’ai eu le même problème quand dans mes investigations, j’ai essayé une update de Drupal en navigant vers update.php, après avoir mis le paramètre $update_free_access à true dans settings.php car avec tous mes problèmes, je ne peux pas me connecter en tant qu’admin.

Je corrige mon message précédent.
Il suffit de charger la page une seconde fois pour voir apparaitre les erreurs Le fichier n'a pas pu être créé.

J’ai aussi essayé avec Nginx à la place d’Apache. Le problème reste le même.

au cas où, est-ce que tu peux te connecter à la base de données en ligne de commande avec ton utilisateur admin et assigner les objets de betaforms à framaforms_user ? (@thelem me disait que ça n’avait pas d’incidence mais je testerais quand même à ta place)

sudo -u postgres psql
puis
\c framaforms
REASSIGN OWNED BY betaforms TO framaforms_user;
DROP user betaforms

EDIT : en fait ça sert à rien dans ton cas car il n’existe pas. Faudrait le créér avant l’import ou changer le dump sql pour passer les betaforms en framaforms_user.

sed -i « s/betaforms/framaforms_user/g » framaforms.sql

Et rejouer la procédure.

Perso j’avais essayé les deux sans succès mais bon, dans mon cas comme le tuto était faux je créais un repertoire qui s’appelait framaforms_private_files donc ça risquait pas de marcher.

si ça ne suffit pas je tenterais aussi les snippets pour vider à la main le cache dans la base de données :

https://www.drupal.org/docs/7/administering-drupal-7-site/clearing-or-rebuilding-drupals-cache/

après je préfère préciser que je n’ai aucune connaissance particulière de drupal/framaforms et que je n’ai pas réussi à aller au bout du tuto non plus :sweat_smile: