symfony2: échec de l'écriture du répertoire cache

j'ai dû utiliser le

app/console cache:clear  command

pour résoudre un problème lors de la génération d'une entité.

je suis maintenant incapable de charger ma page d'accueil :

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

il dit :

RuntimeException: Échec de cache en écriture du fichier "/var/www/projet_etienne/app/cache/dev/classes.php".

je ne comprends pas bien de cette cache d'affaires!

dans mon dossier app/cache , j'ai eu un dossier dev , un dossier dev_new , un dossier dev_old . Est-ce normal?

le

app/console cache:clear

génère par la voie a:

[ErrorException] Attention: renommer (/var/www/projet_etienne/app/cache/dev,/var/www / projet_etien

ne/app/cache/dev_old): le Répertoire n'est pas vide dans /var/www/projet_etienne/vendo

r / symfony/symfony / src/Symfony/Bundle/Framorkbundle / Command / CacheClearComm

et.php ligne 77

s'il vous plaît aider!

54
demandé sur Trix 2012-11-03 21:48:32

8 réponses

Pour une BONNE et définitive de solution reportez-vous à la Setting up Permissions , rubrique "151950920 de la section":

mettre en place les Autorisations

Un problème courant lors de l'installation de Symfony, c'est que l'app/cache et app/logs répertoires doivent être accessibles en écriture par le serveur web et le utilisateur de ligne de commande. Sur un système UNIX, si l'utilisateur de votre serveur web est différent de celui de votre utilisateur de ligne de commande, vous pouvez essayer l'une de l' solutions suivantes.

  1. Utiliser le même utilisateur de la CLI et le serveur web

Dans les environnements de développement, c'est une pratique courante d'utiliser le même UNIX de l'utilisateur de la CLI et le serveur web, car il permet d'éviter toute d' ces problèmes d'autorisations lors de la mise en place de nouveaux projets. Cela peut être fait en modifiant la configuration du serveur web (par exemple, couramment httpd.conf ou apache2.conf d'Apache) et l'établissement de ses utilisateurs à la même que vos CLI utilisateur (par exemple pour Apache, mettre à jour L'Utilisateur et le groupe valeur.)

  1. utilisant ACL sur un système qui supporte chmod +a

de nombreux systèmes vous permettent d'utiliser la commande chmod +A. Essayez dans un premier temps, et si vous obtenez une erreur - essayez la méthode suivante. Ceci utilise une commande pour essayez de déterminer l'utilisateur de votre serveur web et définissez-le comme 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. utilisant ACL sur un système qui ne soutien chmod +un

certains systèmes ne prennent pas en charge chmod +a, mais prennent en charge un autre utilitaire appelé setfacl. Vous devrez peut-être activer le support ACL sur votre partition et installer setfacl avant de l'utiliser (comme c'est le cas avec Ubuntu). Ce utilise une commande pour essayer de déterminer utilisateur de votre serveur web et de le définir comme 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

pour Symfony 3 Il serait:

$ 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 ce ne pas travailler, essayer d'ajouter-N option.

  1. sans utiliser ACL

si aucune des méthodes précédentes ne fonctionne pour vous, changez l'umask de sorte que les répertoires cache et log seront accessibles en écriture de groupe ou en écriture mondiale. (selon que l'utilisateur du serveur web et l'utilisateur de la ligne de commande sont même groupe ou non). Pour cela, ajoutez la ligne suivante à la début de l'application / console, web / Application.php et web / app_dev.les fichiers php:

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

// or

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

notez que l'utilisation de L'ACL est recommandée lorsque vous y avez accès sur votre serveur parce que changer l'umask n'est pas sûr.

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

source : N'a pas réussi à écrire le fichier cache "/var/www/myapp/app/cache/dev/classes.php " lors de l'apurement du cache

90
répondu zizoujab 2018-06-05 10:38:26

la Plus probable, il signifie que le répertoire et/ou sous-répertoires ne sont pas accessible en écriture. Beaucoup oublient sur les sous-répertoires.

Symfony 2

chmod -R 777 app/cache app/logs

Symfony 3 structure de répertoire

chmod -R 777 var/cache var/logs

Ressources Supplémentaires

Autorisations solution par Symfony (mentionné précédemment).

Permissions solution by KPN University -comprend en outre un écran-moulé sur l'installation.

Note: Si vous utilisez la structure de répertoires Symfony 3, remplacez app/cache et app/logs par var/cache et var/logs .

21
répondu timofey 2014-06-17 19:43:04

si le dossier est déjà accessible en écriture, ce n'est pas le problème.

vous pouvez aussi simplement naviguer vers /www/projet_etienne/app/cache/ et supprimer manuellement les dossiers qui s'y trouvent (dev, dev_new, dev_old).

assurez-vous de sauvegarder une copie de ces dossiers quelque part à remettre si cela ne règle pas le problème

je sais que ce n'est pas la façon dont cela devrait être fait, mais cela a fonctionné pour moi quelques fois maintenant.

17
répondu Mats Rietdijk 2012-11-03 20:59:42

vous avez probablement avorté une clearcache à mi-chemin et maintenant vous avez déjà une application/cache/dev_old.

essayez ceci (à la racine de votre projet, en supposant que vous êtes sur un environnement Unixy comme OS X ou Linux):

rm -rf app/cache/dev*

11
répondu Boy Baukema 2015-04-02 14:57:20

peut-être avez-vous oublié de changer les permissions de app/cache app/log

j'utilise Ubuntu so

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

J'espère que ça aidera..

8
répondu rai 2014-08-03 07:32:29

j'ai exécuté:

ps aux | grep apache

et j'ai quelque chose comme ça:

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

donc mon utilisateur sans accès s'est avéré être www-data donc j'ai exécuté des commandes:

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

et il a résolu les erreurs d'accès.

, Jamais utiliser non sécurisés 777 pour résoudre des accès probles:

sudo chmod -R 777 app/cache
sudo chmod -R 777 app/logs
1
répondu Stan Fad 2017-01-25 17:20:35

je déplace tout le répertoire de mon installation Windows vers un serveur de production unix et j'ai eu la même erreur. Pour le réparer, je viens de lancer ces deux lignes dans unix et tout a commencé à fonctionner correctement

rm -rf app/cache/*
rm -rf app/logs/*
1
répondu Rodol Velasco 2018-08-10 05:48:13

si la version symfony est inférieure à 2,8

sudo chmod -R 777 app/cache/*

si symfony version grande ou égale 3.0

sudo chmod -R 777 var/cache/*
0
répondu rapaelec 2018-06-05 14:15:30