Initialisation d'un projet symfony 1.4 avec SVN

C’est une opération que je fais rarement. Et du coup, à chaque fois, j’ai des doutes sur la procédure et je recherche les infos sur internet.
Pour gagner du temps, et pour réunir toutes les infos, j’ai donc décidé de me créer ce document récapitulatif.
Vous allez me dire, pourquoi faire un tuto sur sf1 maintenant ? Car je suis opérationnelle sur sf1 contrairement à sf2, ce serait donc trop long pour faire des sites "simples" et j’ai promis de le livrer le mois prochain….

 

CREATION DU DEPOT SVN

La 1ère étape est de créer le dépôt.
Pour cela, il faut se connecté en tant que root sur le répertoire des dépôt svn, sur notre serveur tout les dépot sont dans /var/svn

 
svnadmin create /var/svn/monProjet

Par contre, comme le dossier a été crée avec l'utilisateur root, ses droits sont liés à cet utilisateur. Or dans ma configuation, svn est utilisé via apache, il faut donc que je change les droits des fichiers.

 
chown -Rf www-data:www-data monProjet

Ensuite il faut créer les dossiers trunk, branches et tags (plus besoin d'être connecté en root pour cela).

 
svn mkdir http://adresse-serveur/svn/monProjet/trunk http://adresse-serveur/svn/monProjet/branches http://adresse-serveur/svn/monProjet/tags

 

CONFIGURATION DNS ET HOST

J’ai pris l’habitude de créer un vhost pour chacun des mes projets en dev du style monProjet.muriel.dev.
Pour cela j’utilise un serveur DNS bind9, dans lequel j’édite mon fichier db.dev.dns.
J’ajoute ensuite mon VirtualHost dans mon fichier muriel.dev dans apache. Ne pas oublier de faire pointer le vhost sur le dossier web de Symfony.
Je ne rentre pas plus dans les détails de cette partie. La configuration de bind et apache pourrait faire un sujet de tuto à lui tout seul si Ulrich à le temps.

 

CREATION PROJET SYMFONY

On se place à present sur la machine de développement.
Et on fait un checkout du projet (oui, je sais il est vide. Ça m’a fait bizarre aussi la 1ère fois mais c’est la seule façon de faire)

 
svn co http://adresse-serveur/svn/monProjet/trunk monProjet

On crée le dossier lib/vendor

 
mkdir –p lib/vendor

Puis un checkout de symfony

 
cd lib/vendor
svn co http://svn.symfony-project.com/branches/1.4/ symfony

Et enfin  la création du projet en lui-même, et dans la foulée notre première application, par convention frontend

 
cd ../..
php lib/vendor/symfony/data/bin/symfony generate:project monProjet --orm=Propel
php symfony generate:app frontend
 

Pour pouvoir configurer le svn et mettre la lib symfony en tant que external, il faut d’abord ajouter les dossiers créer au dépôt svn.

 
svn add apps cache config lib log plugins test web

Remarque: oui, on ajoute les dossiers cache et log, même si on ignorera les fichiers et dossiers qu’ils contiennent.
On peut maintenant externaliser les lib

 
svn pe svn:externals lib/vendor/

Cela ouvre un éditeur. Dans celui là, on indique pour chaque sous-dossier de vendor qu’on veut externaliser l’adresse du dépôt à suivre.

 
symfony http://svn.symfony-project.com/branches/1.4/

C’est aussi comme ce la qu’on ajoutera, si on veut d’autres lib externe comme twig, imagine….
Si on fait un svn status on verra que la ligne lib/vendor est maintenant précédée d’un X.
Après avoir vérifié que toutes les autres lignes sont précédées d’un A (sinon on les ajoute en faisant un svn add nomDuDossier), il est temps de faire le premier commit.

 
svn ci –m 'creation du projet monProjet’

On finit la config de svn en configurant les fichiers et les dossiers que je souhaites ignorer. La technique est différente selon que l'on veuille ignorer un fichier (ou un type de fichier), un dossier ou le contenu d'un dossier.
J'utilise eclipse comme IDE, je veux donc ignorer les fichiers qu'il gènère, pour cela je dois éditer la liste des svn:ignore à la racine de mon projet

 
svn propedit svn:ignore .

Cette commande ouvre un éditeur dans lequel on saisit la lsite des fichiers et dossiers que l'on veut ignorer et qui sont situer au niveau où je suis.

 
.settings
.project
.buildpath
 

Pour ignorer le contenu d'un dossier (mais pas le dossier), je dois éditer la liste du dossier en lui-même. Par exemple pour le cache:

 
svn propedit svn:ignore cache/

Puis dans l'éditeur:

 
*

J'ai procédé de la même manière pour ignorer le contenu du dossier log.
Pour ignorer les liens symboliques qui sont dans web:

 
svn propedit svn:ingore web/
 
*Plugin

 

CONFIGURATION DU PROJET SYMFONY

J’ai choisi d’utiliser l’orm Propel plutôt que Doctrine.
Pour mettre à jour propel, je dois installer le nouveau plugin pour utiliser la dernière version 1.6.

 
svn checkout http://svn.github.com/propelorm/sfPropelORMPlugin.git plugins/sfPropelORMPlugin
cd plugin/sfPropelORMPlugin/lib/vendor
svn checkout http://phing.mirror.svn.symfony-project.com/tags/2.3.3/classes/phing phing --force
svn checkout http://svn.github.com/propelorm/Propel.git propel --force
 

Il y a ensuite quelques fichiers à modifier…

 
// config/ProjectConfiguration.class.php
 
class ProjectConfiguration extends sfProjectConfiguration
{
  public function setup()
  {
    $this->enablePlugins('sfPropelORMPlugin');
  }
}

Et dans config/propel.ini, il faut remplacer les sfpropelPlugin par sfPropelORMPlugin, ou plus simplement copier le fichier propel.ini du plugin dans Symfony

 
> cp plugins/sfPropelORMPlugin/config/skeleton/config/propel.ini config/propel.ini


On peut également externaliser le plugin comme on a externalisé la lib symfony.
Dans tous les cas on effectue un second commit pour l’installation de propel.

Il reste plus qu’à modifier les droits des fichiers log et cache et de créer les liens symboliques dans le dosser web pour les plugins.

 
php symfony project :permissions
php symfony plugin :publish-assets

Rappel: il ne faut absolument pas committer les liens symboliques.

Nous avons maintenant un beau projet symfony tout propre !
Il ne reste plus qu’à commencer à travailler…

Il n'y aucun commentaire