write symfony2: error al escribir el directorio de caché




symfony unable to write in the cache directory (7)

He tenido que usar el

app/console cache:clear  command

para resolver un problema al generar una entidad.

Ahora no puedo cargar mi página de inicio en:

  http://localhost/projet_etienne/web/app_dev.php

dice :

RuntimeException: no se pudo escribir el archivo de caché "/var/www/projet_etienne/app/cache/dev/classes.php".

¡No entiendo mucho sobre este negocio de caché!

En mi carpeta de app/cache , obtuve un dev , un dev_new , una carpeta dev_old . ¿Eso es normal?

el

app/console cache:clear

genera por cierto a:

[ErrorException] Advertencia: cambiar el nombre (/ var / www / projet_etienne / app / cache / dev, / var / www / projet_etien
ne / app / cache / dev_old): directorio no vacío en / var / www / projet_etienne / vendo
r / symfony / symfony / src / Symfony / Bundle / FrameworkBundle / Command / CacheClearComm
and.php línea 77

¡por favor ayuda!


Lo más probable es que signifique que el directorio y / o los subdirectorios no pueden escribirse. Muchos olvidan los subdirectorios.

Symfony 2

chmod -R 777 app/cache app/logs

Estructura del directorio de Symfony 3

chmod -R 777 var/cache var/logs

Recursos adicionales

Solución de permisos de Symfony (mencionada anteriormente).

La solución de permisos de KPN University - incluye adicionalmente un screen-cast en la instalación.

Nota: Si está utilizando la estructura de directorios de Symfony 3, sustituya la app/cache y la app/logs con var/cache y var/logs .


Tal vez se olvidó de cambiar los permisos de la aplicación / caché de la aplicación / registro

Estoy usando Ubuntu entonces

sudo chmod -R 777 app/cache
sudo chmod -R 777 app/logs
sudo setfacl -dR -m u::rwX app/cache app/logs

Espero eso ayude..


Si la carpeta ya puede escribirse, ese no es el problema.

También puede navegar a /www/projet_etienne/app/cache/ y eliminar manualmente las carpetas allí (dev, dev_new, dev_old).

Asegúrese de guardar una copia de esa carpeta en algún lugar para volver a colocarla si esto no soluciona el problema

Sé que esta no es la forma en que debería hacerse, pero funcionó para mí un par de veces.


Probablemente abortó un clearcache a la mitad y ahora ya tiene una aplicación / cache / dev_old.

Pruebe esto (en la raíz de su proyecto, suponiendo que esté en un entorno Unixy como OS X o Linux):

rm -rf app/cache/dev*


Muevo todo el directorio de mi instalación de Windows a un servidor de producción de Unix y recibí el mismo error. Para solucionarlo, acabo de ejecutar estas dos líneas en Unix y todo comenzó a funcionar bien

rm -rf app / cache / * rm -rf app / logs / *


ejecuté:

ps aux | grep apache

y obtuve algo como eso:

root     28147  0.0  5.4 326336 27024 ?        Ss   20:06   0:00 /usr/sbin/apache2 -k start
www-data 28150  0.0  1.3 326368  6852 ?        S    20:06   0:00 /usr/sbin/apache2 -k start
www-data 28151  0.0  4.4 329016 22124 ?        S    20:06   0:00 /usr/sbin/apache2 -k start
www-data 28152  0.1  6.0 331252 30092 ?        S    20:06   0:00 /usr/sbin/apache2 -k start
www-data 28153  0.0  1.3 326368  6852 ?        S    20:06   0:00 /usr/sbin/apache2 -k start
www-data 28154  0.0  1.3 326368  6852 ?        S    20:06   0:00 /usr/sbin/apache2 -k start
www-data 28157  0.0  1.3 326368  6852 ?        S    20:06   0:00 /usr/sbin/apache2 -k start
user     28297  0.0  0.1  15736   924 pts/4    S+   20:12   0:00 grep --color=auto apache

entonces mi usuario sin acceso resultó ser www-data así que ejecuté comandos:

sudo chown -R www-data app/cache
sudo chown -R www-data app/logs

y resolvió los errores de acceso.

Nunca use inseguro 777 para resolver problemas específicos de acceso:

sudo chmod -R 777 app/cache
sudo chmod -R 777 app/logs

Para obtener una solución BUENA y definitiva, consulte la sección Setting up Permissions en la sección Installing and Configuring Symfony :

Configurando Permisos

Un problema común al instalar Symfony es que los directorios de la aplicación / caché y la aplicación / registros deben poder escribirse tanto en el servidor web como en el usuario de la línea de comandos. En un sistema UNIX, si el usuario de su servidor web es diferente de su usuario de línea de comandos, puede probar una de las siguientes soluciones.

  1. Use el mismo usuario para la CLI y el servidor web

En entornos de desarrollo, es una práctica común utilizar el mismo usuario de UNIX para la CLI y el servidor web porque evita cualquiera de estos problemas de permisos al configurar nuevos proyectos. Esto se puede hacer editando la configuración de su servidor web (por ejemplo, comúnmente httpd.conf o apache2.conf para Apache) y estableciendo que su usuario sea el mismo que su usuario CLI (por ejemplo, para Apache, actualice los valores de Usuario y Grupo).

  1. Usar ACL en un sistema que admite chmod + a

Muchos sistemas le permiten usar el comando chmod + a. Pruebe esto primero, y si obtiene un error, intente con el siguiente método. Utiliza un comando para tratar de determinar el usuario de su servidor web y configurarlo como HTTPDUSER:

$ rm -rf app/cache/*
$ rm -rf app/logs/*

$ HTTPDUSER=`ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\  -f1`
$ sudo chmod +a "$HTTPDUSER allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
$ sudo chmod +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
  1. Usar ACL en un sistema que no admite chmod + a

Algunos sistemas no son compatibles con chmod + a, pero admiten otra utilidad llamada setfacl. Es posible que deba habilitar el soporte de ACL en su partición e instalar setfacl antes de usarlo (como es el caso de Ubuntu). Utiliza un comando para tratar de determinar el usuario de su servidor web y configurarlo como HTTPDUSER:

$ HTTPDUSER=`ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\  -f1`
$ sudo setfacl -R -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX app/cache app/logs
$ sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX app/cache app/logs

Para Symfony 3 sería:

$ HTTPDUSER=`ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\  -f1`
$ sudo setfacl -R -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX var/cache var/logs
$ sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX var/cache var/logs

Si esto no funciona, intente agregar la opción -n.

  1. Sin usar ACL

Si ninguno de los métodos anteriores funciona para usted, cambie la umask para que los directorios de caché y de registro sean de escritura grupal o de escritura mundial (dependiendo de si el usuario del servidor web y el usuario de la línea de comandos están en el mismo grupo o no). Para lograr esto, coloque la siguiente línea al comienzo de los archivos de la aplicación / consola, web / app.php y web / app_dev.php:

umask(0002); // This will let the permissions be 0775

// or

umask(0000); // This will let the permissions be 0777

Tenga en cuenta que se recomienda utilizar ACL cuando tiene acceso a ellos en su servidor porque cambiar el umask no es seguro para subprocesos.

http://symfony.com/doc/current/book/installation.html#checking-symfony-application-configuration-and-setup

source: Error al escribir el archivo de caché "/var/www/myapp/app/cache/dev/classes.php" al borrar el caché





symfony