lunedì 16 novembre 2009

Utilizzare symfony in Windows con WampServer

Ho pensato potesse essere utile a chi volesse seguire lo sviluppo di Lyra sotto Windows una breve guida su come configurare symfony per l'utilizzo in questo sistema operativo.

Servono innanzi tutto Apache, MySql e PHP. Il modo più veloce per installarli in Windows è utilizzare un 'pacchetto' come Wamp, Xampp o EasyPHP; la procedura riportata di seguito è stata provata su WampServer versione 2.0-i, per chi utilizza uno degli altri prodotti la sostanza non cambia, ma possono esserci differenze nei percorsi dei file di configurazione di Apache e dell'eseguibile PHP.

Serve poi un client subversion. TortoiseSVN è facile da utilizzare e gratuito.

Una volta installate queste componenti creiamo una cartella per l'applicazione, ad esempio C:\sfprojects\lyra.

Checkout da repository

Come prima cosa conviene scaricare dal repository su Google Code la versione più recente dell'applicazione. In Windows Explorer fare clic con il pulsante destro sulla cartella C:\sfprojects\lyra e selezionare SVN Checkout (se non c'è l'opzione non si è installato correttamente TortoiseSVN); nella finestra di dialogo inserire:

  • URL of repository: http://lyra-cms.googlecode.com/svn/trunk/
  • Checkout directory: C:\sfprojects\lyra
  • Checkout depth: fully recursive (la casella 'Omit external' deve essere non selezionata)
  • Head revision

Il primo checkout richiede del tempo perché deve essere scaricato tutto il framework. Gli aggiornamenti a versioni successive saranno più veloci.

Configurazione virtual host

Personalmente trovo comodo lavorare in locale attraverso l'utilizzo dei virtual host: in questo modo si possono gestire molti progetti senza dover creare una miriade di sotto-cartelle nella Document Root di Apache.

Assumo che l'installazione di Wamp sia stata fatta nella cartella predefinita C:\wamp. Aprire con un editor di testi il file httpd.conf che si trova nella cartella

C:\wamp\bin\apache\Apache2.2.11\conf

Il numero di versione di Apache può essere diverso a seconda della versione di Wamp installata. Trovare questa riga

#Include conf/extra/httpd-vhosts.conf

e decommentarla rimuovendo il '#' iniziale, salvare poi il file.

Aprire il file httpd-vhosts.conf che si trova nella cartella

C:\wamp\bin\apache\Apache2.2.11\conf\extra

Accertarsi che sia presente e attiva (cioè non preceduta da '#') la riga

NameVirtualHost *:80

Aggiungere alla fine del file

<VirtualHost *:80>
    ServerName localhost
    DocumentRoot "c:/wamp/www/"
</VirtualHost>

<VirtualHost *:80>  
ServerName lyra  
DocumentRoot "c:/sfprojects/lyra/web/"  
DirectoryIndex index.php
<Directory "c:/sfprojects/lyra/web/">
    AllowOverride All
    Allow from All
</Directory>

Alias /sf "c:/sfprojects/lyra/lib/vendor/symfony/data/web/sf"
<Directory "c:/sfprojects/lyra/lib/vendor/symfony/data/web/sf">
 AllowOverride All
 Allow from All
</Directory>

Alias /sfDoctrinePlugin "c:/sfprojects/lyra/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/web"
<Directory "c:/sfprojects/lyra/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/web">
 AllowOverride All
 Allow from All
</Directory>
</VirtualHost>

Aprire il file hosts che si trova nella cartella

C:\WINDOWS\system32\drivers\etc

Aggiungere subito dopo

127.0.0.1 localhost

questa riga

127.0.0.1 lyra

Al posto di lyra si può ovviamente usare il nome che si vuole basta che corrisponda a ServerName nella configurazione del virtual host. A questo punto bisogna eseguire Wamp, se è già in esecuzione si deve comunque riavviare Apache dal menù disponibile cliccando l'icona di notifica di Wamp.

Attivazione mod_rewrite

Bisogna anche attivare il modulo Apache mod_rewrite per gestire URL semplificate (SEF) in symfony. Basta fare clic sull'icona di WampServer nell'area di notifica, selezionare l'opzione del menù Apache >> Apache modules >> scorrere la lista dei moduli fino a trovare rewrite_module e selezionarlo.

Configurazione PHP

Durante lo sviluppo di un'applicazione symfony è frequente eseguire script PHP da riga di comando. Per prima cosa copiare nella cartella C:\sfprojects\lyra il file symfony.bat che si trova nella cartella

C:\sfprojects\lyra\lib\vendor\symfony\data\bin

Occorre poi configurare una variabile di ambiente PHP_COMMAND che serve a far conoscere allo script symfony.bat il percorso dell'eseguibile PHP che nel nostro caso è

C:\wamp\bin\php\php5.3.0\php.exe

Il numero di versione di PHP può essere diverso a seconda della versione di Wamp installata.

In Windows XP (io a quello sono rimasto): Pannello di controllo >> Sistema >> tab Avanzate >> in fondo alla finestra di dialogo premere il pulsante 'Variabili di ambiente', nella finestra successiva premere 'Nuovo' sotto 'Variabili utente' (o sotto 'Variabili di sistema' se si preferisce) e inserire

  • Nome variabile: PHP_COMMAND
  • Valore variabile: C:\wamp\bin\php\php5.3.0\php.exe

Chiudere tutto con OK. Per verificare di aver fatto tutto bene aprire una finestra terminale e scrivere

cd c:\sfprojects\lyra
symfony -V

Deve comparire il numero della versione di symfony.

Configurazione database MySql

Da phpMyAdmin (con Wamp si lancia navigando con il browser all'indirizzo http://localhost/phpmyadmin/) creare un database ed un nuovo utente assegnandogli i privilegi sul database.

Modificare il file c:\sfprojects\lyra\config\databases.yml inserendo il nome database, utente e password che si sono appaena creati.

Tornare alla finestra terminale, accertarsi di essere ancora in c:\sfprojects\lyra e scrivere

symfony doctrine:build-all-reload

Dare conferma all'avviso che le tabelle del database saranno ricreate. Se non ci sono errori nella configurazione del database, si vedranno una serie di messaggi che avvisano del progresso delle varie operazioni (generazione delle classi del modello, creazione tabelle, caricamento fixtures). Alla fine scrivere

symfony cc

Aprendo il browser e digitando http://lyra/frontend_dev.php ci si trova sulla prima pagina dell'applicazione. Per entrare nel backend l'indirizzo è http://lyra/backend_dev.php.

La procedura sembra complessa, ma la gran parte del lavoro (configurazione virtual host, creazione database, impostazione PHP) si fa una volta sola. Il comando doctrine:build-all-reload va eseguito obbligatoriamente dopo il primo checkout, in seguito quando ci si aggiorna alle successive revisioni non è necessario a meno che non vi siano state modifiche alla struttura del database. Eseguire il comando comunque non fa danno, ma va tenuto presente che le tabelle vengono cancellate, ricreate e ricaricati i dati di prova (fixtures), quindi si perdono eventuali dati inseriti.

La pulizia della cache di symfony con il comando 'cc' va eseguita ogni volta dopo un checkout o update dal repository.

Tortoise SVN come ogni altro client subversion consente di creare una copia di lavoro locale aggiornata non solo alla versione più recente dell'applicazione, ma ad un qualsiasi numero di revisione che indicheremo nella finestra di dialogo dell'opzione checkout.

Come detto a suo tempo, questo permette di ripercorrere l'intero sviluppo seguendo gli articoli pubblicati dall'inizio, ma anche da un qualsiasi momento successivo in quanto in ogni articolo è indicato il numero di revisione a cui si riferisce il codice.

Tutta la procedura è stata testata, chi dovesse incontrare qualche problema lasci un commento e proverò ad aiutarlo.

2 commenti:

Graziella ha detto...

mi complimento vivamente per il suo articolo...

ho solo un piccolo problema ... al comando
symfony doctrine:build-all-reload
mi restituisce questo Task doctrine:build-all-reload is not defined... a cosa potrebbe essere dovuto??

Massimo ha detto...

L'articolo è stato scritto un po' di tempo fa e quel comando era per symfony 1.3. Nella versione attuale va sostituito con:

symfony doctrine:build --all --and-load

Posta un commento

Nota. Solo i membri di questo blog possono postare un commento.