Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [Opened] jacl2db dans un script d'installation

Posted by gdugas on 10/09/2011 18:23

Bonjour,

J'ai ici un simple module de wiki que je suis en train de développer. Le module utilise jauthdb et jacl2db, et dans le module.xml, je le déclare donc comme dépendant de jauthdb et jacl2db. Dans le script d'installation "module"/install/install.php, j'initialise les droits jacl2:

    function install() {
<code>
        if ($this->firstExec('jauthdb')) {
            jAcl2DbManager::addSubject('jwiki.pages.create', 'jwiki~acl2.pages.create');
            jAcl2DbManager::addSubject('jwiki.pages.delete', 'jwiki~acl2.pages.delete');
            jAcl2DbManager::addSubject('jwiki.pages.modify', 'jwiki~acl2.pages.modify');
            jAcl2DbManager::addSubject('jwiki.pages.view', 'jwiki~acl2.pages.view');
        }
    }
</code>

Lorsque je veux installer ce module par la commande jelix --myapp installmodule jwiki, je suis confronté au message d'erreur:

[[error]] An error occured during the installation of the module jacl2db: SQLSTATE[[23000]]: Integrity constraint violation: 1062 Duplicate entry 'acl.user.view' for key 'PRIMARY'

Ce n'est pas la première fois que j'ai ce message, et après avoir potasser la doc j'ai toujours du mal à comprendre. Je devrais ne pas déclarer jacl2db comme dépendance pour pouvoir rajouter mes sujet dans la base jacl2 ?

  [Opened] jacl2db dans un script d'installation

Reply #1 Posted by foxmask on 10/10/2011 01:12

bonsoir,

c'est jelix1.3rc2 avec postgresql ?? dans la rc3 il y a eu une correction sur jacl2db

sinon dans ce cas là il faudrait regarder dans var/log/error.log pour voir si on a plus de détails sur la contrainte


@GitHub - Forum HaveFnuBB! powered by Jelix - Le Booster Jelix !

  [Opened] jacl2db dans un script d'installation

Reply #2 Posted by gdugas on 10/10/2011 08:26

Non c'est la version 1.2.6 avec mysql et le module master_admin d'installé.
J'ai pour le moment désactivé l'installation de mon module, mais je dois faire quelques tests dans la journée avec un peu plus de rigueur pour ces histoires d'installation, pke hier soir je me suis mis en mode développeur borné et acharné (en mode développeur quoi :) ): j'ai du rater quelque chose dans étapes de l'installation d'un module, comment fonctionne le cache, etc ... du coup l'install ne marche pas, je m'acharne sur la suppression du temp/, je réinstalle tout, je vais parfois jusqu'à supprimer mes cookies, et quand ca ce remet a marcher ... ben je ne sais pas pourquoi !!! :/
Bref, je vous tiens au courant ^^, et merci beaucoup pour ton aide.

  [Opened] jacl2db dans un script d'installation

Reply #3 Posted by laurentj on 10/10/2011 08:47

Bonjour,

à priori, l'origine du problème est que l'installation du module jacl2db est lancé alors qu'il est déjà installé d'une manière ou d'une autre.

tu as plusieurs points d'entrée ? as tu installé auparavant le module jacl2db sur la même base, à la main ou via une autre appli (d'admin par ex) ?

  [Opened] jacl2db dans un script d'installation

Reply #4 Posted by gdugas on 10/10/2011 09:17

L'application créée est là juste pour le développement d'un simple module de wiki.
Il y a donc le point d'entrée index.php et le point d'entrée admin.php créé par la commande php jelix.php --jblank initadmin admin
Dans le module jwiki/module.xml j'ai rajouté jacl2db comme étant une dépendance: <dependencies><jelix minversion="1.2.3" maxversion="1.2.*"/><module name="jacl2db" /></dependencies>

Ensuite niveau configuration, j'ai activé le module jacl2db=1 et jauthdb=1, puis pour les coordplugins, j'ai fait pointé jacl2.coord.ini.php sur celui créé par le module master_admin, et ai copié auth.coord.ini.php créé par master_admin pour pouvoir modifier le paramètre authrequired=off.

Voici les fichiers de conf pour les détails:
index/config.ini.php:

;<?php die(''); ?>
;for security reasons , don't remove or modify the first line

startModule=jblank
startAction="default:index"

[[responses]]
[[modules]]
jblank.access=2
jauth.access=1
jauthdb.access=1
jwiki.access=2
jacl2db.access=2

[[coordplugins]]
auth="index/auth.coord.ini.php"
jacl2="admin/jacl2.coord.ini.php"

[[acl2]]
driver=db

admin/config.ini.php:

;<?php die(''); ?>
;for security reasons , don't remove or modify the first line

startModule=master_admin
startAction="default:index"

[[responses]]
html=adminHtmlResponse
htmlauth=adminLoginHtmlResponse
[[modules]]
jacldb.access=0
junittests.access=0
jWSDL.access=0
jauth.access=2
master_admin.access=2
jauthdb.access=2
jauthdb.installparam=defaultuser
jauthdb_admin.access=2
jacl2db.access=2
jacl2db.installparam=defaultuser
jacl2db_admin.access=2
[[simple_urlengine_entrypoints]]
admin="jacl2db~*@classic, jauth~*@classic, jacl2db_admin~*@classic, jauthdb_admin~*@classic, master_admin~*@classic"

[[coordplugins]]
auth="admin/auth.coord.ini.php"
jacl2="admin/jacl2.coord.ini.php"

[[acl2]]
driver=db

Rien d'autre au niveau installation ou configuration n'a été modifié manuellement ... ou du moins, pas que je me souvienne, c'est possible aussi que j'ai raté une étape. Néanmoins je vais relancer cette procédure dans la matinée pour confirmer tout ca.

  [Opened] jacl2db dans un script d'installation

Reply #5 Posted by gdugas on 10/10/2011 19:19

Je viens de me pencher un peu sur le script d'installation de jacl2db, sur la version jelix-1.2.7pre-dev. En voici un extrait, des commentaires de ma part qui indiquent ce que j'ai cru comprendre du code:

class jacl2dbModuleInstaller extends jInstallerModule {
<code>
    protected $defaultDbProfile = 'jacl2_profile';

    function install() {
        if ($this->entryPoint->type == 'cmdline')
            return;

       // On récupère le parametre jacl2 de [coordplugins], d'abord sur le "point d'entree/config.ini.php", et si absent, sur "defaultConfig.ini.php"
       $aclconfig = $this->config->getValue('jacl2','coordplugins');

        // On récupère le paramètre jacl2 de [coordplugins] seulement sur defaultConfig.ini.php
        $aclconfigMaster = $this->config->getValue('jacl2','coordplugins',null, true);

        // type du point d'entrée json || jsonrpc || soap || xmlrpc (true), ou autre (false)
        $forWS = (in_array($this->entryPoint->type, array('json', 'jsonrpc', 'soap', 'xmlrpc')));

        $ownConfig = false;

        // Pas de paramètre jacl2 présent dans le "point d'entree/config.ini.php" ni dans le "defaultConfig.ini.php"
        if (!$aclconfig || ($forWS && $aclconfigMaster == $aclconfig)) {

            $pluginIni = 'jacl2.coord.ini.php';
            $configDir = dirname($this->entryPoint->configFile).'/';
            $ownConfig = true;
            $aclconfig = $configDir.$pluginIni;

            if ($this->firstExec('jacl2:'.$aclconfig)) {
                // no configuration, let's install the plugin for the entry point
                $this->config->setValue('jacl2', $aclconfig,'coordplugins');
                if (!file_exists(JELIX_APP_CONFIG_PATH.$aclconfig)) {
                    $this->copyFile('var/config/'.$pluginIni , JELIX_APP_CONFIG_PATH.$aclconfig);
                }
            }
        }
        ... etc etc ...

}

</code>

En gros pour résumer , si aucun paramètre jacl2 n'a été transmis ni dans le defaultConfig, ni dans le config, le traitement de la base de donnée s'effectue et l'écriture de la configuration s'effectue.

Donc si j'ai bien compris, si par exemple, on veux installer a la fois le module jacl2db sur les points d'entrée blog.php et admin.php, et que dans le fichier defaultConfig.ini.php, on indique que le modules jacl2db.access=0, l'installation du jacl2db sera donc effectuée 2 fois, y compris l'installation de la même base de donnée

  [Opened] jacl2db dans un script d'installation

Reply #6 Posted by gdugas on 10/10/2011 19:56

Voici un simple test que j'ai fais à l'instant: je créé une simple application, vide

php jelix.php --myapp createapp
cp -R /usr/local/lib/jelix-1.2.6-dev/jelix-www/ myapp/www/jelix

# Configuration dbprofils
cp dbprofils.ini.php myapp/var/config

# On créé un deuxième point d'entrée
php jelix.php --myapp createentrypoint mytest

Je rajoute ensuite dans index/config.ini.php et dans mytest/config.ini.php jacl2db.access=1, puis je lance php myapp/install/installer.php, tout sans accros, idem en rajoutant mon module jwiki. Le module master_admin poserai des problèmes avec jacl2db ?

  [Opened] jacl2db dans un script d'installation

Reply #7 Posted by gdugas on 10/10/2011 20:11

Bon désolé de vous faire perdre du temps, je vous ai menti: je n'arrive plus a reproduire ce message d'erreur, même avec master_admin :s
Peut être qu'à force de me pencher sur le problème je commence à comprendre comment marche l'installation d'un module ...
Je vous donnerai des nouvelles une fois que je serai sur de ce qui m'a causé ces soucis, et merci encore

  [Opened] jacl2db dans un script d'installation

Reply #8 Posted by foxmask on 10/10/2011 21:13

le principal est d'avancer :)


@GitHub - Forum HaveFnuBB! powered by Jelix - Le Booster Jelix !

 
Page
  1. jacl2db dans un script d'installation