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

  [Opened] microappli : tutorial_2 relogeable avec sqlite

Posted by Maurice on 05/16/2008 18:23

Bonjour,

    

Je suis en train de tester le tutorial 2 de jelix, et je rencontre certains problèmes dont le principal est lié à sqlite3 (mais fonctionne avec mysql)

    

Avant de détailler mon problème je vous présente d'abord ma démarche générale

    

Objectif général de la micro appli :

    

Mon but est de créer un prototype d'appli avec des conditions d'installation et d'exploitation particulièrement souple.

    

Tout doit tenir dans un répertoire disons "actu.org" (en référence au tutorial_2) y compris :

  • jelix lui-meme (ça ne pose pas de pb)
  • la base de donnée, donc forcément sqlite, dans un répertoire avec les droits pour tous

Ce tutorial doit pouvoir être relogeable sans modifier la config. de jelix, ni de l'appli elle-même que ce soit :

  • en déplaçant le répertoire de l'appli complète dans un sous-répertoire
  • en plaçant ce répertoire sur un autre serveur
      

Ca sous-entend qu'aucun chemin n'est codé en dur, en particulier dans les fichiers xxx.ini.php, par exemple pour préciser le chemin PDO de la base de données sqlite !

    

Ensuite (une cerise sur le gateau), il faudra pouvoir jouer avec le ".htaccess" (et non pas le httpd.conf hein !) pour que la page d'accueil de l'appli corresponde au répertoire de l'appli complète, et non pas au sous-répertoire publique www.

Par exemple, si le répertoire de l'appli complète est :

    
        cd  ~toto/public_html/test/jelixwork/jelix-1.0.3-dev
            

On voudrait remplacer une URL de la forme :

    
        http://localhost/~toto/test/jelixwork/jelix-1.0.3-dev/actu.org/www
        

par une URL de la forme :

    
        http://localhost/~toto/test/jelixwork/jelix-1.0.3-dev
        

En fait, je pense que ce ferait une grosse différence avec les autres framework (et aguicherait des utilisateurs potentiels) si jelix proposait une version de son tutorial (ou tutor ?) sous forme d'une archive entièrement autonomme qui contienne donc :

  • une appli (tutor...)
  • une base de donnée sqlite préremplie du fiches bidon (avec les droits d'acces pour tous de la base sqlite)
  • configurée pour qu'elle soit relogeable sans config supplémentaire
  • intégrant la version courante de jelix

Premiere question : est-ce possible ? (indépendemment du problème décrit ci-après)

Probleme rencontré lors la la réalisation du tutoriel 2 avec sqlite :

Je peux créer une et une seule fiche avec sqlite, toute création d'un nouvel enregistrement se solde par un echec du type :

    
            [error 23000] SQLSTATE[23000]: Integrity constraint violation: 
            19 PRIMARY KEY must be unique 
            /.../jelixwork/jelix-1.0.3-dev/temp/actu.org/compiled/\
                                   daos/modules/news~news~sqlite.php 156

Extrait de dbprofiles.ini.php

    
        default = actu.org.sqlite
   
        [actu.org.mysql]
        
        driver="mysql"
        database="actu"
        host= "localhost"
        user= "root"
        password="root"
        persistent= off
        force_encoding = off
        
        [actu.org.sqlite]
        
        driver=pdo
        ; TODO 
        ;   trouver moyen de passer le chemin en relatif. Ce serait facile
        ;   si on était en php : pourquoi créer un format .ini ??
        ; 
        ;dsn=sqlite:var/data/actu.org.sqlite3
        dsn=sqlite:/home/.../.../var/data/actu.org.sqlite3

Fichier sql d'initialisation de la base sqlite3 (dommage qu'il n'y ait pas de migration comme dans Rails ;-)

        
        -- sqlite3 var/data/actu.org.sqlite3 \
        --            < init_actu_news_table-sqlite3.sql
        DROP table if exists `news`;
        
        CREATE TABLE news (
            id_news  INTEGER PRIMARY KEY,
            sujet varchar(255) not null ,
            texte text not null ,
            news_date date not null 
        );   
        
        INSERT INTO news VALUES (
            NULL, 
            'première news', 
            'Ceci est une première news. In commodo ... end.', 
            '2006-01-15'
        );
         
        INSERT INTO news VALUES (
            NULL, 
            'Lorem Ipsum', 
            'Lorem ipsum dolor sit amet, consectetuer adipiscing elit.', 
            '0007-10-10'
        );

Création de la base sqlite initiale avec les bons droits...:

   
    cd $jelixwork (mon appli tutorial)
    mkdir -p var/data

    # créer la base initiale
    sqlite3 var/data/actu.org.sqlite3 < init_actu_news_table-sqlite3.sql

    chmod go-rw var
    chmod go-r var/data
    chmod go+w var/data
    chmod 777 var/data/*
    

Voilà pour les résultats de mes premier test de Jelix. Merci pour toute information sur ces problèmes.

  • Maurice

  [Opened] Re: microappli : tutorial_2 relogeable avec sqlite

Reply #1 Posted by laurentj on 05/16/2008 23:17

Salut,

jelix lui-meme (ça ne pose pas de pb)

evidément

la base de donnée, donc forcément sqlite, dans un répertoire avec les droits pour tous

Pas de problème non plus, mais il faut que ce soit l'utilisateur qui mette les droits, car même si on les met à l'origine, pas dis que lors de la copie ces droits soient conservés.

Ce tutorial doit pouvoir être relogeable sans modifier la config. de jelix, ni de l'appli elle-même que ce soit en plaçant ce répertoire sur un autre serveur, en plaçant ce répertoire sur un autre serveur

Bouger le repertoire du tuto avec le repertoire lib en même temps, y a pas de souci. Par contre déplacer juste le répertoire du tuto, ce n'est pas possible sans toucher au moins au fichier application.init.php de l'appli. Je vois pas comment l'appli pourrait deviner où est installé Jelix.

Ca sous-entend qu'aucun chemin n'est codé en dur, en particulier dans les fichiers xxx.ini.php, par exemple pour préciser le chemin PDO de la base de données sqlite !

Euh, il faut bien indiquer des chemins en dur. Ils peuvent être relatifs hein. C'est sûr que si tu met des chemins complets ça va être compliqué. Mais heureusement, jelix fonctionne trés bien avec des chemins relatifs, y compris pour indiquer la base de données sqlite.

Premiere question : est-ce possible ?

Oui tout à fait.

e peux créer une et une seule fiche avec sqlite, toute création d'un nouvel enregistrement se solde par un echec du type :

Tout schema sqlite doit être mauvais je pense. Je ne vois pas en quoi Jelix est responsable de ce genre d'erreur.

;dsn=sqlite:var/data/actu.org.sqlite3
dsn=sqlite:/home/.../.../var/data/actu.org.sqlite3

Si tu utilises le driver sqlite natif de jDb, il suffit juste d'indiquer le nom du fichier sqlite et placer celui-ci dans var/db/sqlite/ (mais malheureusement, PHP n'utilise que sqlite 2.x via cette api). Là tu utilises PDO, donc effectivement il faut indiquer un chemin complet. On pourrait toutefois modifier la classe jDbPDOConnection.

dommage qu'il n'y ait pas de migration comme dans Rails ;-)

no comment...

  [Opened] Re: microappli : tutorial_2 relogeable avec sqlite

Reply #2 Posted by laurentj on 05/17/2008 23:03

Sauf que c'est en contradiction avec ce que tu dis ensuite (ce n'est pas possible avec PDO, sauf en modifiant la classe jDbPDOConnection !

Non, ce n'est pas en contradiction si tu utilises le driver sqlite de jDb, et non PDO.

Mais ce serait tellement plus simple si les fichiers .ini.php était tout simplement de vrai fichoer php

lire et modifier un fichier ini, c'est plus simple pour l'utilisateur. Et pour le charger, c'est plus performant qu'un fichier PHP.

Il y a peut-être une erreur au niveau de l'auto-incrémentation du champs id_news (dans jelix ? dans mon sql ?)

je n'en sais rien, et je n'ai pas le temps de chercher. Si tu trouves l'erreur, ça m'interresse.

  [Opened] Re: microappli : tutorial_2 relogeable avec sqlite

Reply #3 Posted by Maurice on 05/20/2008 17:17

Propose un autre ticket, on devrait pouvoir le faire.

C'est fait en: http://developer.jelix.org/ticket/590

J'ai vu que tu as déjà répondu et prévu d'intégrer cette feature à la version jelix-1.1beta1 :
merci !
Je vais donc passer à la version snapshot 1.1a1 pour mon apprentissage !

Maurice

 
Page
  1. Re: microappli : tutorial_2 relogeable avec sqlite