2011-09-09 10 views
12

Debido a limitaciones de implementación, me gustaría tener los directorios de registro y caché utilizados por mi aplicación Symfony2 en algún lugar en/var/... en mi sistema de archivos. Por esta razón, estoy buscando una forma de configurar Symfony y anular la ubicación predeterminada para estos dos directorios.Cambiando cache_dir y log_dir con Symfony2

He visto kernel.cache_dir y kernel.log_dir y he leído la clase Kernel.php. Por lo que he visto, no creo que sea posible cambiar las ubicaciones de los directorios por configuración y tendría que parchar la clase Kernel.php.

¿Es cierto o hay una manera de lograr lo que quiero sin modificar el código de la estructura?

Respuesta

5

Creo que la manera más fácil es vincular la carpeta a otro lugar. Hemos hecho esto en el servidor de prod, pero cuando desarrollas local tal vez en Windows es un poco complicado establecer los enlaces simbólicos.

ln -s /var/cache/ /var/www/project/app/cache 

algo como esto.

+0

He resuelto muchos problemas (como los errores estúpidos en Assetic) muy fácilmente con 'ln -snf', este es el camino a seguir. – ChocoDeveloper

16

Añadir los siguientes métodos de aplicación/AppKernel.php (AppKernel extiende Kernel) haciéndolos regresar a sus caminos preferidos:

public function getCacheDir() 
{ 
    return $this->rootDir . '/my_cache/' . $this->environment; 
} 

public function getLogDir() 
{ 
    return $this->rootDir . '/my_logs'; 
} 
7

Yo estaba feliz de encontrar su puesto, pero yo estaba un poco confundido de la respuestas descoordinadas.

Tengo el mismo problema y descubrí que los registros dependen del parámetro de configuración kernel.logs_dir.

Así que acaba de agregar a mis config.yml parámetros:

kernel.logs_dir: /var/log/symfonyLogs 

espero que es servicial para usted, incluso, si es una respuesta tardía.

0

que utiliza el configuration solution from Dragnic pero me puso a los caminos en el archivo parameters.yml porque este archivo es ignorado por git. en otras palabras, no está sincronizado desde mi PC al repositorio git, por lo que no hay impacto en el entorno prod.

# app/config/parameters.yml 
parameters: 
    database_driver: pdo_mysql 
    [...] 
    kernel.cache_dir: "T:/project/cache" 
    kernel.logs_dir: "T:/project/logs" 

Configuración: Windows7, WAMP 2.4 y Symfony 2.3.20.

pero hay que saber que:

sobrescribir el parámetro kernel.cache_dir de su archivo de configuración es una muy mala idea, y no una forma compatible de cambiar la carpeta de caché de Symfony.

Rompe cosas porque ahora tendría diferentes carpetas de caché para el kernel Kernel::getCacheDir() y para el parámetro.

Fuente: https://github.com/symfony/AsseticBundle/issues/370

lo que debe utilizar solamente en dev medio ambiente y si no desea cambiar el contenido del archivo de aplicación /AppKernel.php, de lo contrario ver las otras respuestas.

+1

ADVERTENCIA => MALA IDEA !!! especialmente si está usando Assetic: https://github.com/symfony/AsseticBundle/issues/370 – Oliboy50

+0

@ Oliboy50: gracias, actualicé mi respuesta para advertir a los usuarios. –

3

Me gustaría ofrecer una alternativa y es establecer variables de entorno para cambiar estos directorios. De esta manera, es más fácil de configurar dependiendo del escenario. (prueba, producción o desarrollo)

export SYMFONY__KERNEL__CACHE_DIR "/your/directory/cache" 
export SYMFONY__KERNEL__LOGS_DIR "/your/directory/logs" 

Las variables de entorno también se pueden establecer en el host virtual con SetEnv. Al leer los parámetros del kernel, Symfony buscará todas las variables $ _SERVER que comiencen con SYMFONY__, tirará la primera parte y convertirá todas las guiones bajos dobles en a.

Source code

línea Ver 568 a 608