web-dev-qa-db-fra.com

symfony2: échec de l'écriture du répertoire de 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 sur:

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

ça dit :

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

Je ne comprends pas grand chose à propos de cette affaire de cache!

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

la

app/console cache:clear

génère au passage a:

[ErreurException] Attention: renommer (/ var/www/projet_etienne/app/cache/dev,/var/www/projet_etien
ne/app/cache/dev_old): répertoire non vide dans/var/www/projet_etienne/vendo
r/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Command/CacheClearComm
and.php ligne 77 

aidez s'il vous plaît!

54
Matoeil

Pour une solution BONNE et définitive, voir la section Setting up Permissions dans la section Installing and Configuring Symfony

Configuration des autorisations

Un problème courant lors de l’installation de Symfony est que l’app/cache et Les répertoires app/logs doivent être accessibles en écriture à la fois par le serveur Web et par le fichier utilisateur en ligne de commande. Sur un système UNIX, si votre utilisateur de serveur Web est différent de votre utilisateur de ligne de commande, vous pouvez essayer l’un des fichiers solutions suivantes.

  1. Utiliser le même utilisateur pour la CLI et le serveur Web

Dans les environnements de développement, il est courant d’utiliser la même chose Utilisateur UNIX pour la CLI et le serveur Web, car cela évite le ces autorisations posent problème lors de la configuration de nouveaux projets. Cela peut être Pour ce faire, modifiez la configuration de votre serveur Web (par exemple, généralement httpd.conf ou Apache2.conf pour Apache) et définissez son utilisateur sur identique à votre utilisateur CLI (par exemple, pour Apache, mettez à jour les valeurs User et Group ).

  1. Utilisation de la liste de contrôle d'accès sur un système prenant en charge chmod + a

De nombreux systèmes vous permettent d'utiliser la commande chmod + a. Essayez ceci en premier, et si vous obtenez une erreur - essayez la méthode suivante. Ceci utilise une commande pour essayez de déterminer votre utilisateur de serveur Web et de le définir 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. Utilisation de la liste de contrôle d'accès sur un système ne prenant pas en charge chmod + a

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 installez setfacl avant de l’utiliser (comme c’est le cas avec Ubuntu). Ce utilise une commande pour essayer de déterminer votre utilisateur de serveur Web et 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, ce 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 fonctionne pas, essayez d'ajouter l'option -n.

  1. Sans utiliser ACL

Si aucune des méthodes précédentes ne fonctionne pour vous, changez le umask pour que les répertoires de cache et de journal seront en écriture de groupe ou en écriture de monde (selon que l'utilisateur du serveur Web et l'utilisateur de la ligne de commande appartiennent au même groupe ou non). Pour ce faire, placez la ligne suivante au début des fichiers app/console, web/app.php et web/app_dev.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 la liste de contrôle d’accès est recommandée lorsque vous y avez accès sur votre serveur car changer d'umask n'est pas thread-safe.

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

source: Echec de l'écriture du fichier cache "/var/www/myapp/app/cache/dev/classes.php" lors de l'effacement du cache

91
zizoujab

Cela signifie très probablement que le répertoire et/ou les sous-répertoires ne sont pas accessibles en écriture. Beaucoup oublient les sous-répertoires.

Symfony 2

chmod -R 777 app/cache app/logs

Structure de répertoire Symfony 3

chmod -R 777 var/cache var/logs

Ressources supplémentaires

Solution d'autorisations de Symfony (mentionné précédemment).

La solution de droit d’autorisation de l’Université KPN - comprend en outre une projection d’écran lors de l’installation.

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

22
timofey

Si le dossier est déjà accessible en écriture, le problème ne se pose pas.

Vous pouvez également simplement naviguer vers /www/projet_etienne/app/cache/ et supprimer manuellement les dossiers qu’il contient (dev, dev_new, dev_old).

Assurez-vous de sauvegarder une copie de ce dossier quelque part pour pouvoir la remettre si cela ne résout pas le problème

Je sais que ce n'est pas comme cela que cela devrait être fait, mais cela a fonctionné pour moi à quelques reprises maintenant.

17
Mats Rietdijk

Vous avez probablement annulé un clearcache à mi-chemin et 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
Boy Baukema

Peut-être avez-vous oublié de modifier les autorisations de app/cache app/log

J'utilise Ubuntu alors

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 aide..

8
user2338925

Je déplace le répertoire entier de mon installation Windows vers un serveur de production Unix et j'ai la même erreur. Pour résoudre ce problème, je viens d'exécuter ces deux lignes sous Unix et tout a commencé à fonctionner correctement

rm -rf app/cache/*
rm -rf app/logs/*
1
Rodol Velasco

j'ai exécuté:

ps aux | grep Apache

et a 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é les commandes

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

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

N'utilisez jamais le 777 non sécurisé pour résoudre des problèmes d'accès spécifiques:

Sudo chmod -R 777 app/cache
Sudo chmod -R 777 app/logs
1
Stan Fad

si la version de symfony est inférieure à 2.8

Sudo chmod -R 777 app/cache/*

if symfony version great than or equal 3.0

Sudo chmod -R 777 var/cache/*

0
rapaelec

Utilisez simplement cette commande acl, la prochaine fois que les fichiers de var seront créés, ils disposeront de l’autorisation r/w/x pour l’utilisateur www-data.

cd var 
rm -rf *
cd ..
setfacl -d -m u:www-data:rwx var

Cmd explication:

setfacl -> Set acl command    
-d -> default behavior    
-m -> modify 
u:www-data: -> for user 
rwx -> adding permissions  
var -> on the folder
0
Levy Moreira