Subir proyecto de Symfony a hosting
Hoy tuve que subir un proyecto de symfony a un hosting ‘normal’; o sea, sólo tenía acceso por ftp y un administrador simple de MySql, el tan conocido por todos PhpMyAdmin. Este artículo intentará ser una simple guía para poder realizar esta tarea que tantos dolores de cabeza les trae al grupo de aprendices de symfony; en los cuales estamos todos menos ese tal Fabien.
Aclaremos que lo hice usando Symfony 1.2, por lo que puede variar en algunos detalles cuando usemos otra versión.
Primero; los requisitos mínimos.
Muy posiblemente no va a ser ni la primera ni la última vez que subimos nuestro proyecto, creamos la base de datos, importamos los datos, etc. sin antes cerciorarnos que nuestro maldito hosting cumpla con los requerimientos técnicos mínimos. Aclaración para el alunado que nunca falta: no es necesario que en el servidor tengamos instalado symfony.
phpInfo.
Bueno, lo primero que podemos hacer es echarle una mirada a la configuración de php que tenemos en nuestro servidor. Simplemente haciendo un script, por ejemplo con el nombre info.php, y llamando a la función phpInfo() podemos ver un buen panorama de la configuración en el server.
<?php echo phpinfo() ; ?>
Check Configuration.
Y la segunda buena idea que podemos tener es ejecutar el script de chequeo de configuración que viene incluido cuando instalamos symfony (en la modalidad que sea) en nuestro server local. En mi caso donde uso Ubuntu y he instalado symfony mediante pear dicho archivo se encuentra en la siguiente dirección.
/usr/share/php/data/symfony/bin/check_configuration.php
Yo he modificado ligeramente el archivo para que quede mas lindo, similar a una consola .
. Pueden descargar el archivo check_configuration.php.tar enlace, descomprimirlo y subirlo directamente a la raiz del hosting y ejecutarlo. En mi hosting actual, este es el link de prueba donde se aprecia que esta todo bien.
Si hay algo que no cuadra en estas pruebas, no sigas. Es imprescindible que estos chequeos sean correctos.
Freezar !
Freezar el proyecto es imprescindible. Creo haber leído que en futuras versiones esto ya no será necesario ya que nuestro proyecto tendrá el código necesario para que sea autosuficiente. Por lo pronto esto no es así.
Una tarea importante, que por lo menos yo siempre hago, es hacer una copia de nuestro proyecto ANTES de freezar. Porque al hacerlo en el proyecto se copiarán las librerías y archivos necesarios. Si bien existen métodos para desfreezar el proyecto me parece que es preferible trabajar con una copia local.
En la raíz de nuestro proyecto:
$ symfony freeze /usr/share/php/symfony
La ubicación donde se encuentra instalado symfony (/usr/share/php/symfony en mi caso) puede variar en función del tipo de instalación que hemos utilizado. Para saber cual es la ruta correcta para nuestro caso podemos usar:
$ symfony -V
Limpiar la Basura. Configurar permisos.
Podemos limpiar la cache usando el comando de symfony o borrando los archivos a mano. También podemos borrar el contenido de la carpeta log/ ya que no nos interesa subirlo al hosting.
$ rm -rf cache/* $ rm -rf log/*
También podemos darle permisos de escritura a estas carpetas para la aplicación pueda generar los archivos sin problemas.
$ chmod 777 cache/ -R $ chmod 777 log/ -R
Subir el proyeto al hosting.
Esto puede ser verdaderamente una tarea complicada si no lo hacemos con un mínimo de astucia. A lo que voy, en esta instancia mi proyecto tiene cerca de 4600 archivos (find -type f | wc -l). Si se nos ocurre subir vía ftp el proyecto al servidor a lo paisano vamos a notar que podemos estar una buena cantidad de minutos observando la progresión. Ni hablar si se nos corta la transmisión en medio de la transición. Un caos.
A comprimiiiiiirrrrr.
Lo ideal sería que en nuestro hosting tengamos alguna herramienta que nos permita descomprimir archivos en el servidor, como cPanel. De esta manera con solo comprimir todo el proyecto en forma local, subir un solo archivo (del órden de una decena de megas) y descomprimir en el server a otra cosa mariposa.
Pero si no contamos con este beneficio nos las podemos arreglar con algún script programado en php para tal fin. Para esto usamos PclZip.
PclZip es una clase programada en PHP que nos permite descomprimir archivos .zip. Lo mejor que podemos hacer es guardar en una carpeta el proyecto comprimido, la clase PclZip y un archivo que usaremos para la descrompresión llámese unzip.php.
Nuestro archivo unzip.php debe incluir la clase php pclzip, crear un objeto y definirle a dicho objeto el nombre del archivo que queremos descomprimir. Podemos hacer algo así:
<?php
require_once('pclzip.lib.php');
echo '<h3>Cargamos clase pclzip</h3>';
echo '<h3>Creando objeto ...</h3>';
$archive = new PclZip("miProyecto.zip");
if ($archive->extract() == 0) {
die("Error : ".$archive->errorInfo(true));
}
else {
echo '<h2>Descompresión OK</h2>';
}
?>
Ahora sólo resta subir estos tres archivos al hosting y ejecutar el script unzip.php. Tengamos en cuenta que esta tarea puede tardar varios segundos. No nos pongamos nerviosos. La pantalla permanecerá con el mensaje ‘Creando objeto …’ un lapso que dependerá de cuán potente es nuestro servidor. Es un buen momento para ir a hacer pis.
Si todo el proceso no ha sufrido errores al actualizar la vista en nuestro gestor ftp podremos ver todos los archivos y carpetas producto de descomprimir nuestro proyecto.
Esta historia continuará …
Restan muchas cosas por resolver que por cuestiones de tiempo y esfuerzo no puedo hacerlas ahora. Si consideramos que ya haz creado la base de datos y has importado lo que tenias en el server local la aplicación debería funcionar.
Espero que este artículo siga evolucionando en función de nuevas experiencias, preguntas y respuestas que puedan llegar. Saludos.
Esta historia continuará …



Diego
2 Jul, 2009
Estoy a días de poner en producción un proyecto en Symfony y como es el primero, nunca probé el tema de freezado,instalación y puesta en marcha.
Me vino muy bien el post!!! seguí así. gracias
RetroFOX
2 Jul, 2009
Gracias loco.
Cualquier duda que tengas con este tema avisame así vamos completando el tutorial. Quedan muchas cosas que hacer como por ejemplo configurar el .htaccess, etc.
Saludos.
Albert
17 Jul, 2009
como configuras para que el dominio apunte directamente a la carpeta web, no veo como hacerlo en dreamhost
RetroFOX
17 Jul, 2009
Es es algo en lo que estoy trabajando ahora mismo. Dame unas horas y publicamos la solución.
Saludos.
Vinotinto
18 Jul, 2009
Gracias viejo, por si acaso podes recomendar algun buen proveedor o host para symfony? Mi hosting no me permite subir archivos de mas de 1 MB de tamaño. Por cierto en una parte decís poner chmod 777 los archivos. Hasta donde tengo entendido JAMAS hay que poner a 777 los archivos. eso significa permisos totales de escritura y lectura por TODOS. 755 es lo máximo, 777 significa que cualquier visitante usuario no autorizado puede modificar tus archivos. Te cuento porque a mi me hackeron la web una vez y era porque tenia archivos a 777. Donde cargaste symfony?
cesar
30 Oct, 2009
no se pueden descargas los archivos para checar la configuracion de php