Laravel 5.4 – php artisan cache:clear löscht keine Cache-Dateien, wenn der ‘file’-Cache-Treiber verwendet wird

Lesezeit: 5 Minuten

Benutzeravatar von fronzee
franz

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.

  • 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

Benutzeravatar von Precastic
Fertigteil

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.

  • Nur manuell entfernen bringt nichts? Ist das alles, was cache:clear tut, alle diese Cache-Dateien löschen?

    – Andreas

    18. März 2018 um 0:52 Uhr

  • Scheint zu funktionieren, danke! Obwohl seltsam, funktioniert das Löschen des Caches mit cache:clear lokal, aber nicht in der Produktion =/

    – Andreas

    18. März 2018 um 1:11 Uhr

  • @Andrew Nach dem, was ich gelesen habe und soweit mir bekannt ist, alles cache:clear löscht zwischengespeicherte Dateien. Was Ihren zweiten Punkt betrifft, sind Sie möglicherweise ein Mitglied von sudo vor Ort?

    – Fertigteil

    20. März 2018 um 9:30 Uhr

  • Ein Blick in Illuminate\Cache\FileStore.php, was passiert im Falle von a flush ist das jedes Verzeichnis unten framework/cache/data wird gelöscht. Daher benutze ich rm -rf framework/cache/data/*wodurch auch verhindert wird, dass .gitignore im Cache-Ordner entfernt wird.

    – Panepeter

    10. April 2018 um 11:13 Uhr

  • Eine Anmerkung – die kurze Antwort kann manchmal zu Problemen mit dem Löschen führen .gitignore Dateien. Wenn möglich, bevorzuge und finde ich es viel sicherer, es einfach zu tun sudo php artisan cache:clear wenn es ein Berechtigungsproblem ist.

    – Sommerentwickler

    12. April 2021 um 18:16 Uhr

Benutzeravatar von Leonardo Cabré
Leonardo Cabre

Du kannst es versuchen:

php artisan config:cache

Es löst die meisten meiner Probleme.

  • Danke, aber kein Glück hier. Das Problem wurde nicht behoben.

    – franz

    8. August 2017 um 15:55 Uhr

  • Es gibt mehrere Caches in Laravel & config:cache löscht und speichert nur die Konfigurationsdateien der Anwendung. Die von der Methode Cache::remember() erstellten Cache-Dateien sind was cache:clear sollte sich klären. config:cache ist für OPs Problem nicht relevant.

    – Fertigteil

    24. November 2017 um 17:25 Uhr


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.

1434080cookie-checkLaravel 5.4 – php artisan cache:clear löscht keine Cache-Dateien, wenn der ‘file’-Cache-Treiber verwendet wird

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy