Laravel 5.4-App. CACHE_DRIVER
ist eingestellt auf file
und QUEUE_DRIVER
ist eingestellt auf sync
in .env
.
Wenn ich laufe php artisan cache:clear
Es sagt Cache cleared successfully
dennoch habe ich immer noch 236K Dateien in meinem storage/framework/cache
Verzeichnis.
Frustriert darüber habe ich auch alle Dateien/Verzeichnisse unter manuell gelöscht storage/framework/cache
verwenden rm -rf *
aus diesem Verzeichnis.
Jetzt, wenn ich laufe art queue:restart
Ich bekomme [ErrorException] file_put_contents(/var/www/vhosts/my-app.com/releases/28/storage/framework/cache/ee/2f/ee2f842aa7bb1f53ed
f3a2ed2c09a1807ffa6c90): failed to open stream: No such file or directory
Also, ich habe zwei Probleme an meinen Händen. Erstens: Warum werden nicht alle Cache-Dateien von Artisan gelöscht? Wie lösche ich sie sicher? Zweites Problem ist: wie erhole ich mich davon damit php artisan queue:restart
fällt mir kein Fehler auf?
UPDATE: Mir ist aufgefallen, dass ich wahrscheinlich keinen Grund habe, einen Queue-Worker neu zu starten, wenn QUEUE_DRIVER
ist eingestellt auf sync
, also löst das Überspringen dieses Befehls die Hälfte meines Problems. Ich bin mir immer noch nicht sicher, wie ich diese 236 KB Cache-Dateien richtig löschen kann.
Aktualisierung Januar 2020
Für all das scheint es eine einfache Lösung zu geben. Mit dieser Antwort https://serverfault.com/a/96349 Als Referenz können Sie das gid-Bit auf den übergeordneten Ordner setzen, damit alle nachfolgenden Dateien und Ordner darunter erstellt werden ./storage/*
von jedem in der richtigen Gruppe beschreibbar sind, unabhängig davon, wer sie erstellt hat; wodurch die Probleme mit der Gruppensicherheitsberechtigung wie unten erläutert überwunden werden.
Das funktioniert bei mir:
# Assumes all required users belong to the www-data group
sudo chgrp -R www-data /path/to/storage
sudo chmod g+s /path/to/storage
Kurze Antwort
Verwenden Sie sudo: sudo rm -r ./storage/framework/cache
Lange Antwort
Stellen Sie sicher, dass alle Prozesse, die in den Cache schreiben, denselben Benutzer verwenden (und nicht nur derselben Gruppe angehören), da sich herausstellt, dass Laravel Cache-Dateien mit Berechtigungen wie etwa 0755 schreibt, was das Schreiben auf den Eigentümer beschränkt.
Wenn Sie wie ich für jeden einen anderen Benutzer verwenden:
- PHP-Prozess
- Handwerker-CLI
- Handwerker über Vorgesetzten (für Jobs)
Sie erhalten Dateien, die verschiedenen Benutzern gehören und von den anderen Benutzern nicht beschrieben oder gelöscht werden können, selbst wenn sie der erforderlichen Gruppe angehören (www-data als Beispiel).
Hoffentlich kann jemand einen Weg finden, neue Cache-Dateirechte in Larvel auf so etwas wie 0775 zu setzen. Es wäre schön, wenn es nur vom Elternteil geerbt würde.
Randnotiz
Dies war für mich auch ein Problem mit Cache::remember()
zwischen dem Supervisor-Prozess und dem PHP-Prozess, so dass ich es bekommen habe put_file_contents
Fehler, weil die zwischengespeicherten Dateien von den verschiedenen Benutzern nicht beschrieben werden konnten.
Ursprüngliche Antwort
Ich hatte das gleiche Problem und in meinem Fall wurden die Dateien nicht gelöscht, weil sie schreibgeschützt waren. Als ich ging, um sie manuell mit zu löschen rm -r ./storage/framework/cache
Ich habe die Warnung bekommen rm: descend into write-protected directory 'cache/c5'?
. Ich wollte nicht für jede Datei im Cache ja eingeben, also habe ich denselben Befehl wie sudo ausgeführt und es hat reibungslos funktioniert sudo rm -r ./storage/framework/cache
.
Dies beantwortet Ihre Frage, warum sie nicht von Artisan gelöscht werden cache:clear
& laufend rm
ist eine ziemlich einfache Problemumgehung; obwohl es nicht das Problem löst, warum die Dateien als schreibgeschützt geschrieben werden.
Nach dem Löschen des Caches legt Laravel den Cache wieder schreibgeschützt an. Dies bedeutet, dass es sich wahrscheinlich um einen Fehler handelt und dass jemand einen Fehlerbericht an die Laravel-Entwickler senden muss. Da die Problemumgehung trivial ist, überlasse ich das jemand anderem.
Du kannst es versuchen:
php artisan config:cache
Es löst die meisten meiner Probleme.
Sie können Tinker auch verwenden:
php artisan tinker
Cache::store("file")->flush()
Ich bin kürzlich auf ein ähnliches Problem gestoßen. Die durch erstellten Cache-Dateien Cache
Fassade scheint auch nach dem Laufen bestehen zu bleiben php artisan cache:clear
und wie von @Precastic erwähnt, stellt sich heraus, dass es sich um ein Dateiberechtigungsproblem handelt.
Anstatt die Dateien/Ordner manuell zu entfernen, habe ich einfach denselben Befehl mit Administratorrechten wie diesem ausgeführt
sudo php artisan cache:clear
und es hat bei mir funktioniert. Hoffe, das hilft jemandem.
hast du es geschafft, eine Lösung zu finden? Ich stehe vor dem gleichen Problem und kein Glück
– Rafay
26. Mai 2019 um 21:27 Uhr