webentwicklung-frage-antwort-db.com.de

Laravel 5.4 - php artisan cache: clear löscht keine Cache-Dateien, wenn der 'Datei'-Cache-Treiber verwendet wird

Laravel 5.4 App. CACHE_DRIVER Ist auf file und QUEUE_DRIVER Ist auf sync in .env Eingestellt.

Wenn ich php artisan cache:clear Ausführe, wird Cache cleared successfully Angezeigt, und dennoch befinden sich 236 KB Dateien in meinem storage/framework/cache - Verzeichnis.

Frustriert davon habe ich auch alle Dateien/Verzeichnisse unter storage/framework/cache Manuell mit rm -rf * Aus diesem Verzeichnis gelöscht.

Wenn ich nun art queue:restart Ausführe, erhalte ich [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

Ich habe also zwei Probleme. Erstens: Warum werden nicht alle Cache-Dateien von Artisan gelöscht? Wie lösche ich sie sicher? Das zweite Problem ist: Wie kann ich mich davon erholen, damit php artisan queue:restart Mir keinen Fehler macht?

UPDATE: Mir ist aufgefallen, dass ich wahrscheinlich keinen Grund habe, einen Warteschlangen-Worker neu zu starten, wenn QUEUE_DRIVER Auf sync gesetzt ist. Das Überspringen dieses Befehls löst also insgesamt die Hälfte meines Problems. Trotzdem bin ich mir nicht sicher, wie ich diese 236K Cache-Dateien richtig löschen soll.

13
fronzee

Kurze Antwort

Benutze 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) Cachedateien mit Berechtigungen nach dem Vorbild von 0755 schreibt, was einschränkt schreibt an den Besitzer.

Wenn Sie wie ich einen anderen Benutzer für jede dieser verwenden:

  • PHP-Prozess
  • Artisan CLI
  • Handwerker über Supervisor (für Jobs)

Sie erhalten Dateien, die verschiedenen Benutzern gehören und von den anderen Benutzern nicht geschrieben oder gelöscht werden können, selbst wenn sie der erforderlichen Gruppe angehören (www-Daten als Beispiel).

Hoffentlich kann jemand einen Weg finden, neue Cache-Dateiberechtigungen in Larvel auf etwas wie 0775 zu setzen. Es wäre schön, wenn es nur von dem Elternteil geerbt würde.

Randnotiz

Dies verursachte für mich auch ein Problem mit Cache::remember() zwischen dem Supervisor-Prozess und dem PHP) - Prozess, sodass ich put_file_contents - Fehler erhielt, weil die zwischengespeicherten Dateien nicht funktionieren konnten nicht von den verschiedenen Benutzern geschrieben werden.

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 sie manuell mit rm -r ./storage/framework/cache Löschen wollte, bekam ich die Warnung rm: descend into write-protected directory 'cache/c5'?. Ich würde nicht für jede Datei im Cache yes eingeben, also habe ich den gleichen Befehl wie Sudo ausgeführt und es hat problemlos funktioniert Sudo rm -r ./storage/framework/cache.

Dies beantwortet Ihre Frage, warum sie nicht von Artisan cache:clear Gelöscht werden. Die Ausführung von rm ist eine einfache Lösung. obwohl es nicht das Problem löst, warum die Dateien als schreibgeschützt geschrieben werden.

Nach dem Löschen des Caches erstellt Laravel erneut den Cache als schreibgeschützt. Dies bedeutet, dass es wahrscheinlich ein Fehler ist und dass jemand einen Fehlerbericht an Laravel einreichen muss Da die Umgehung trivial ist, überlasse ich das jemand anderem.

13
Precastic

Du kannst es versuchen:

php artisan config:cache

Es löst die meisten meiner Probleme.

6
Leonardo Cabré