2011-12-09 15 views
30

He instalado Symfony 2.0.7 en Ubuntu 11.10. Tengo este problema:Error al escribir el archivo de caché "/var/www/myapp/app/cache/dev/classes.php" al borrar el caché

me cambiaron los permisos de los cache e logs directorios usando los siguientes comandos:

chmod 777 -R cache 
chmod 777 -R logs 

y todas las funciones ya que estaba esperando.

Entonces hice:

app/console cache:clear 

Borrado de la memoria caché para el entorno de desarrollo con la depuración cierto

permisos de cambio de caché/dev a 755 y Symfony no pueden escribir en la que:

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

en /var/www/myapp/app/bootstrap.php.cache línea 1079 en ClassCollectionLoader :: writeCacheFile() en /var/www/myapp/app/bootstrap.php.cache línea 1017 en ClassCollectionLoader: : load() en /var/www/myapp/app/bootstrap.php.cache línea 682 en kernel-> loadClassCache() en línea /var/www/myapp/web/app_dev.php 23

¿Cómo puedo resolver este aparente error en Symfony 2?

+0

que evitar este problema agregando '--no-warmup' al borrar la memoria caché por lo que la carpeta' dev' no va a ser creado por el usuario CLI. Luego, la primera vez que solicita una página dentro de su navegador, la carpeta 'dev' es creada por el usuario' www-data'. Terminé usando la solución publicada por Federico Gallo, a continuación. –

Respuesta

52

Ver el Configuración de permisos nota al margen en la sección Configuration and Setup. Use el enfoque de ACL con setfacl.

p. Ej.

sudo setfacl -R -m u:apache:rwX -m u:`whoami`:rwX app/cache app/logs 
sudo setfacl -dR -m u:apache:rwX -m u:`whoami`:rwX app/cache app/logs 

(donde apache es su usuario HTTPD)

+1

cuando escribo 'setfacl' dice' comando no encontrado' como puedo deshacerme de él – Hunt

+0

@Hunt, instalo el paquete 'acl'. –

+3

para mí dice: setfacl: Opción -m: argumento inválido cerca del carácter 3 – Sarang

8

Bien, estoy usando setfacl para evitar que los problemas pero sigue teniendo problemas. Estoy trabajando en un directorio de usuario estándar por lo que este no funcionan para mí:

APACHEUSER=`ps aux | grep -E '[a]pache|[h]ttpd' | grep -v root | head -1 | cut -d\ -f1` 
sudo setfacl -R -m u:$APACHEUSER:rwX -m u:`whoami`:rwX app/cache app/logs 
sudo setfacl -dR -m u:$APACHEUSER:rwX -m u:`whoami`:rwX app/cache app/logs 

Si usted también, hace esto: (como usuario privilegiado si es necesario, por supuesto)

sudo rm -rf app/cache app/logs 

entonces, como usuario normal crear ambos directorios y luego aplicar los siguientes comandos como usuario normal también (sin sudo):

exit (from root if necessary) 
mkdir app/cache app/logs 

APACHEUSER=`ps aux | grep -E '[a]pache|[h]ttpd' | grep -v root | head -1 | cut -d\ -f1` 
setfacl -R -m u:$APACHEUSER:rwX -m u:`whoami`:rwX app/cache app/logs 
setfacl -dR -m u:$APACHEUSER:rwX -m u:`whoami`:rwX app/cache app/logs 

Nota: recuerde tha t hay dos espacios entre -d\ y -f1

¡Buena suerte!

+0

En lugar de 'exit' debe ejecutar' sudo -k' para dejar privilegios sudo. 'exit' también cierra la consola. –

+0

Gracias por su contribución. El usuario del que hablo es un usuario estándar. Entonces no se agrega a los sudoers. Es por eso que hice su y salgo –

0

En mi caso yo simplemente como usuario root:

sudo -u apache app/console ca:cl 

Apache - esto variará dependiendo del propietario su directorio web.se predetermina a apache asumiendo que está utilizando apache para su servidor web.

0

Al observar sus mensajes llegué a esta página

http://symfony.com/doc/current/setup/file_permissions.html

Entonces me hicieron esto:

HTTPDUSER = ps axo user,comm | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1

sudo setfacl -R -mu: "$ HTTPDUSER" : rwX -mu: whoami: var var de rwX

sudo setfacl -dR -mu: "$ HTTPDUSER": rwX -mu: whoami: rwX var

Y resolvió mi problema

Cuestiones relacionadas