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
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.
- 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 ).
- 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
- 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.
- 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.
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
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
.
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.
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*
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..
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/*
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
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/*
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