HOWTO: symfony framework en Ubuntu Hardy 8.04

Edito (15 de junio de 2008 - 11:52 ): He añadido un par de modificaciones que hay que hacer a la configuración de apache.
Edito (16 de junio de 2008 - 12:10): Otra corrección necesaria en la configuración de apache.

Symfony es un framework para desarrollar aplicaciones web basándonos en el patrón MVC. Me estoy peleando a fondo con él por que lo estoy usando para mi proyecto fin de carrera y me viene genial por que me evita pelearme con muchas cosas a la hora de desarrollar la parte de mi proyecto que es una aplicación web.

La instalación es bastante cómoda y se puede realizar a través de PEAR o mediante un paquete .deb. Yo he elegido la opción de PEAR por que me ha parecido más cómoda y así evito tener que añadir otro repositorio a Ubuntu. El proceso es muy simple:

  1. Instalamos Apache. Yo tengo la mala costumbre de usar para ello un método bastante “cutre” que consiste en instalar phpmyadmin, ya que así se resuelven todas las dependencias necesarias para Apache y PHP

    1.  
    2. sudo aptitude install phpmyadmin
    3.  
  2. Instalamos pear:

    1.  
    2. sudo aptitude install php-pear
    3.  
  3. Añadimos el canal de Symfony:

    1.  
    2. sudo pear channel-discover pear.symfony-project.com
    3.  
  4. Instalamos Symfony mediante PEAR:

    1.  
    2. sudo pear install symfony/symfony
    3.  

Por último solo nos resta configurar Apache. Para mi proyecto he configurado un host virtual con un log separado, así podré testear y depurar cómodamente. Configurarlo en Ubuntu es muy sencillo, solo es necesario añadir una entrada a /etc/hosts y crear el archivo de configuracion del host virtual. Veamos como hacerlo por pasos.

  1. Añadimos la entrada con el dominio que queramos a /etc/hosts. Yo he elegido dominio.com para el ejemplo, pero se puede elegir otro

    1.  
    2. echo "127.0.0.1 dominio.com" >> /etc/hosts
    3.  
  2. Ahora creamos una entrada en /etc/apache2/sites-available/dominio.com con el siguiente contenido

    1.  
    2. NameVirtualHost *
    3. <virtualHost *>
    4.         ServerName dominio.com
    5.         ServerAdmin webmaster@dominio.com
    6.  
    7.         DocumentRoot /var/www/src/web
    8.         DirectoryIndex index.php
    9.  
    10.         ## Cambiamos esta ruta por la que nos convenga
    11.         ErrorLog /ruta/al/fichero/de/log/archivo.log
    12.  
    13.         # Possible values include: debug, info, notice, warn, error, crit,
    14.         # alert, emerg.
    15.         ## Podemos cambiar también el nivel de log por el que más nos convenga
    16.         LogLevel warn
    17.  
    18.         CustomLog /ruta/al/fichero/de/log/archivo.log combined
    19.         ServerSignature On
    20.  
    21. #Configuracion de symfony
    22.  
    23.     Alias /sf /usr/share/php/data/symfony/web/sf
    24.  
    25.     <directory "/usr/share/php/data/symfony/web/sf">
    26.         AllowOverride All
    27.         Allow from All
    28.     </directory>
    29.  
    30.  
    31.     <directory "/var/www/src/web">
    32.         AllowOverride All
    33.         Allow from All
    34.     </directory>
    35.  
    36. </virtualHost>
    37.  
  3. Por último activamos el host virtual, mod_rewrite y reiniciamos apache

    1.  
    2. sudo a2ensite dominio.com
    3. sudo a2enmod rewrite
    4. sudo /etc/init.d/apache2/reload
    5.  

Solo falta editar el archivo /etc/php5/apache2/php.ini y cambiar la linea magic_quotes_gpc = On por magic_quotes_gpc = On

Algunas aclaraciones. En mi caso el código fuente de la aplicación va en una carpeta de mi directorio de usuario y la carpeta /var/www/src es un enlace simbólico a esa carpeta. Este directorio también queda a vuestra elección, pero hay que tener en cuenta que suele ser necesario hacer cambios en el directorio con el código, por lo que es conveniente tener acceso de escritura y también que hay que hacer los cambios pertinentes en el fichero del host virtual de Apache.

Para comenzar a desarrollar podemos acudir a la página de Symfony y seguir su increíble “tutorial” escrito en forma de libro o en librosweb si preferís el libro en español.

Activar el módulo UserDir de Apache 2 en Ubuntu

Estos días ando peleándome con el proyecto fin de carrera y como es un proyecto web me toca pelarme con Apache. El módulo UserDir permite que cada usuario tenga una carpeta que suele ser:

/home/usuario/public_html

a la que se puede acceder mediante

http://host/~usuario

Para activar este módulo en Ubuntu 7.10 ( y supongo que en derivados también) se puede usar:

  1.  
  2. sudo a2enmod userdir
  3. sudo /etc/init.d/apache2 force-reload
  4.  

Tras esto podremos usar lo dicho anteriormente para acceder :)

Problemas al actualizar a una versión de apache mayor de apache-2.2.6-r4 en Gentoo

Acabo de llevarme un pequeño susto al intentar actualizar la Apache en Gentoo. Al parecer a partir de la versión 2.2.6-r4 ha habido algunos cambios en el ebuild y hay que llevar acabo unas cuantas modificaciones en el sistema antes de actualizar. Este es el error que me ha lanzado al intentar actualizar:

  1.  
  2.  * The previous configuration file for built-in modules
  3.  * (/etc/apache2/apache2-builtin-mods) exists on your
  4.  * system.
  5.  *
  6.  * Please read http://www.gentoo.org/doc/en/apache-upgrading.xml
  7.  * for detailed information how to convert this file to the new
  8.  * APACHE2_MODULES USE_EXPAND variable.
  9.  *
  10.  *
  11.  * ERROR: www-servers/apache-2.2.6-r7 failed.
  12.  * Call stack:
  13.  *         ebuild.sh, line 1717:  Called dyn_setup
  14.  *         ebuild.sh, line  768:  Called qa_call ‘pkg_setup’
  15.  *         ebuild.sh, line   44:  Called pkg_setup
  16.  *         ebuild.sh, line 1383:  Called apache-2_pkg_setup
  17.  *   apache-2.eclass, line  365:  Called check_upgrade
  18.  *   apache-2.eclass, line  351:  Called die
  19.  * The specific snippet of code:
  20.  *              die "upgrade not possible with existing ${ROOT}etc/apache2/apache2-builtin-mods"
  21.  *  The die message:
  22.  *   upgrade not possible with existing /etc/apache2/apache2-builtin-mods
  23.  *
  24.  * If you need support, post the topmost build error, and the call stack if relevant.
  25.  * A complete build log is located at ‘/var/tmp/portage/www-servers/apache-2.2.6-r7/temp/build.log’.
  26.  *
  27.  

Como dice en el error hay que visitar esta web para averiguar como actualizar. Para una versión por debajo de 2.2.6-r4 solo hay que ejecutar los siguientes comandos en una consola con permisos de super usuario:

  1.  
  2. echo APACHE2_MODULES=\"$(sed ‘/^mod_/s/mod_\(.*\)\s\+\(shared\|static\)/\1/;t n;d;:n’ /etc/apache2/apache2-builtin-mods)\" >> /etc/make.conf
  3. rm /etc/apache2/apache2-builtin-mods
  4.  

Después de eso solo hay que actualizar apache de forma normal:

  1.  
  2. emerge -uva ‘>=www-servers/apache-2.2.6-r4′
  3.  

Además, en esta página del bugzilla se encuentra un enlace en el que explica las modificaciones que se tienen que realizar en el ebuild de apache.