wake-up-neo.net

symfony2: Cache-Verzeichnis konnte nicht geschrieben werden

Ich musste das benutzen 

app/console cache:clear  command

um ein Problem beim Erzeugen einer Entität zu lösen.

Ich kann meine Homepage jetzt nicht laden auf:

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

es sagt :

RuntimeException: Fehler beim Schreiben der Cache-Datei "/var/www/projet_etienne/app/cache/dev/classes.php".

Ich verstehe nicht viel über dieses Cache-Geschäft!

In meinem app/cache-Ordner habe ich einen dev, einen dev_new und einen dev_old-Ordner. Ist das normal?

das

app/console cache:clear

erzeugt übrigens ein:

[ErrorException] Warnung: Umbenennen (/ var/www/projet_etienne/app/cache/dev)/var/www/projet_etien
ne/app/cache/dev_old): Verzeichnis in/var/www/projet_etienne/vendo nicht leer
r/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Command/CacheClearComm
und.php Zeile 77 

bitte hilf

54
Matoeil

Eine gute und eindeutige Lösung finden Sie im Abschnitt Setting up Permissions im Abschnitt Installing and Configuring Symfony

Berechtigungen einrichten

Ein häufiges Problem bei der Installation von Symfony ist, dass App/Cache und app/logs-Verzeichnisse müssen sowohl vom Webserver als auch vom .__ beschreibbar sein. Befehlszeilenbenutzer. Wenn Ihr Webserver-Benutzer auf einem UNIX-System .__ ist. Anders als Ihr Befehlszeilenbenutzer können Sie einen der .__-Befehle ausprobieren. folgende Lösungen.

  1. Verwenden Sie denselben Benutzer für die CLI und den Webserver

In Entwicklungsumgebungen ist es üblich, dasselbe zu verwenden UNIX-Benutzer für die CLI und den Webserver, da keine Diese Berechtigungen treten beim Einrichten neuer Projekte auf. Das kann sein Dies geschieht durch Bearbeiten der Webserverkonfiguration (z. B. häufig httpd.conf oder Apache2.conf für Apache) und Festlegen des Benutzers als Wie Ihr CLI-Benutzer (aktualisieren Sie z. B. für Apache die Werte für Benutzer und Gruppe ).

  1. Verwenden der ACL auf einem System, das chmod + a unterstützt

Bei vielen Systemen können Sie den Befehl chmod + a verwenden. Versuchen Sie es zuerst mit und wenn Sie eine Fehlermeldung erhalten, versuchen Sie die nächste Methode. Dies verwendet einen Befehl an Versuchen Sie, Ihren Webserver-Benutzer zu ermitteln, und legen Sie ihn als HTTPDUSER fest:

$ 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. Verwenden der ACL auf einem System, das chmod + a nicht unterstützt

Einige Systeme unterstützen chmod + a nicht, unterstützen jedoch ein anderes Dienstprogramm Setfacl genannt. Möglicherweise müssen Sie die ACL-Unterstützung auf Ihrer Partition aktivieren und installieren Sie setfacl vor der Verwendung (wie bei Ubuntu). Diese verwendet einen Befehl, um den Webserverbenutzer zu ermitteln und als .__ festzulegen. 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

Für Symfony 3 wäre das:

$ 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

Wenn dies funktioniert nicht, versuchen Sie, die Option -n hinzuzufügen.

  1. Ohne ACL zu verwenden

Wenn keine der vorherigen Methoden für Sie geeignet ist, ändern Sie die umask so, dass Die Cache- und Protokollverzeichnisse können von Gruppen oder weltweit beschrieben werden (Abhängig davon, ob sich der Webserver-Benutzer und der Befehlszeilen-Benutzer in derselben Gruppe befinden.) oder nicht). Um dies zu erreichen, setzen Sie die folgende Zeile an die Anfang der Dateien app/console, web/app.php und web/app_dev.php:

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

// or

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

Beachten Sie, dass die Verwendung der ACL empfohlen wird, wenn Sie auf Ihrem Server auf sie zugreifen können weil das Wechseln der umask nicht fadensicher ist.

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

source: Fehler beim Schreiben der Cache-Datei "/var/www/myapp/app/cache/dev/classes.php" beim Löschen des Caches

91
zizoujab

Dies bedeutet höchstwahrscheinlich, dass das Verzeichnis und/oder die Unterverzeichnisse nicht beschreibbar sind. Viele vergessen Unterverzeichnisse.

Symfony 2

chmod -R 777 app/cache app/logs

Symfony 3-Verzeichnisstruktur

chmod -R 777 var/cache var/logs

Zusätzliche Ressourcen

Berechtigungslösung von Symfony (zuvor erwähnt).

Berechtigungslösung von KPN University - beinhaltet zusätzlich einen Screencast bei der Installation.

Hinweis: Wenn Sie die Verzeichnisstruktur von Symfony 3 verwenden, ersetzen Sie app/cache und app/logs durch var/cache und var/logs.

22
timofey

Wenn der Ordner bereits beschreibbar ist, ist das nicht das Problem.

Sie können auch einfach zu /www/projet_etienne/app/cache/ navigieren und die darin enthaltenen Ordner manuell entfernen (dev, dev_new, dev_old).

Stellen Sie sicher, dass Sie eine Kopie dieses Ordners irgendwo SPEICHERN, um ihn zurückzusetzen, wenn das Problem dadurch nicht behoben wird.

Ich weiß, dass dies nicht so ist, wie es gemacht werden sollte, aber es hat jetzt ein paar Mal für mich funktioniert.

17
Mats Rietdijk

Sie haben wahrscheinlich einen Clearcache auf halbem Weg abgebrochen, und Sie haben bereits eine App/cache/dev_old.

Versuchen Sie Folgendes (im Stammverzeichnis Ihres Projekts, vorausgesetzt, Sie befinden sich in einer Unixy-Umgebung wie OS X oder Linux):

rm -rf app/cache/dev*

11
Boy Baukema

Möglicherweise haben Sie vergessen, die Berechtigungen für App/Cache-App/Protokoll zu ändern

Ich benutze Ubuntu also

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

Ich hoffe es hilft..

8
user2338925

Ich verschiebe das gesamte Verzeichnis von meiner Windows-Installation auf einen Unix-Produktionsserver, und ich habe den gleichen Fehler erhalten. Um das Problem zu beheben, habe ich diese beiden Zeilen in Unix ausgeführt und alles lief gut

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

ich habe ausgeführt:

ps aux | grep Apache

und so etwas bekommen:

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

mein Benutzer ohne Zugriff stellte sich als www-data heraus, also führte ich folgende Befehle aus:

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

und es löste Zugriffsfehler.

Verwenden Sie niemals eine unsichere 777, um bestimmte Zugriffsprobleme zu lösen:

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

wenn die symfony-version weniger als 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

Verwenden Sie einfach acl cmd, wenn Sie das nächste Mal die Dateien in var erstellen, hat es die Berechtigung r/w/x für den Benutzer www-data.

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

Cmd Erklärung:

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