congelado
Aplicación Laravel 5.4. CACHE_DRIVER
se establece en file
y QUEUE_DRIVER
se establece en sync
en .env
.
cuando corro php artisan cache:clear
Dice Cache cleared successfully
sin embargo, todavía tengo 236K de archivos en mi storage/framework/cache
directorio.
Frustrado por esto, también eliminé manualmente todos los archivos/directorios bajo storage/framework/cache
usando rm -rf *
de ese directorio.
Ahora, cuando corro art queue:restart
yo obtengo [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
Entonces, tengo dos problemas en mis manos. La primera es: ¿por qué Artisan no elimina todos los archivos de caché? ¿Cómo los elimino de forma segura? El segundo problema es: ¿cómo me recupero de esto para que php artisan queue:restart
no me da error?
ACTUALIZACIÓN: se me ocurrió que probablemente no tengo motivos para reiniciar un trabajador de cola si QUEUE_DRIVER
se establece en sync
, por lo que omitir ese comando por completo resuelve la mitad de mi problema. Sin embargo, todavía no estoy seguro de cómo eliminar correctamente esos 236 K de archivos de caché.
precastico
Actualización enero 2020
Parece que hay una solución fácil para todo esto. Usando esta respuesta https://serverfault.com/a/96349 como referencia, puede configurar el bit gid en la carpeta principal para que todos los archivos y carpetas posteriores creados en ./storage/*
pueden ser escritos por cualquier persona en el grupo correcto, independientemente de quién los haya creado; superando así los problemas de permisos de seguridad del grupo como se explica a continuación.
Esto funciona para mí:
# 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
Respuesta corta
Usa sudo: sudo rm -r ./storage/framework/cache
Respuesta larga
Asegúrese de que todos los procesos que escriben en el caché usen el mismo usuario (y no solo pertenezcan al mismo grupo) porque resulta que Laravel escribe archivos de caché con privilegios similares a 0755 que restringe las escrituras al propietario.
Si como yo usas un usuario diferente para cada uno de estos:
- proceso PHP
- CLI artesanal
- Artesano vía supervisor (para trabajos)
Termina con archivos que pertenecen a diferentes usuarios y los otros usuarios no pueden escribirlos ni eliminarlos, incluso si pertenecen al grupo requerido (www-data como ejemplo).
Con suerte, alguien puede encontrar una manera de establecer nuevos privilegios de archivo de caché en Larvel en algo así como 0775. Sería bueno si solo se heredara del padre.
Nota al margen
Esto para mí también estaba causando un problema con Cache::remember()
entre el proceso supervisor y el proceso PHP de tal manera que estaba recibiendo put_file_contents
errores porque los diferentes usuarios no pudieron escribir en los archivos almacenados en caché.
respuesta original
Estaba teniendo el mismo problema y, en mi caso, los archivos no se eliminaban porque estaban protegidos contra escritura. Cuando fui a eliminarlos manualmente usando rm -r ./storage/framework/cache
Recibí la advertencia rm: descend into write-protected directory 'cache/c5'?
. No iba a escribir sí para cada archivo en el caché, así que ejecuté el mismo comando que sudo y funcionó sin problemas. sudo rm -r ./storage/framework/cache
.
Esto responde a su pregunta de por qué Artisan no los elimina cache:clear
& correr rm
es una solución bastante sencilla; aunque no resuelve el problema de por qué los archivos se escriben como protegidos contra escritura.
Después de eliminar el caché, Laravel vuelve a crear el caché como protegido contra escritura. Esto significa que probablemente sea un error y requiere que alguien envíe un informe de error a los desarrolladores de Laravel. Dado que la solución es trivial, lo dejaré para que lo haga otra persona.
-
¿Eliminarlos manualmente no rompe nada? ¿Es esto todo lo que hace cache:clear, eliminar todos estos archivos de caché?
– Andrés
18 de marzo de 2018 a las 0:52
-
Parece funcionar, gracias! Aunque es extraño, borrar el caché con cache:clear funciona localmente pero no en producción =/
– Andrés
18 de marzo de 2018 a las 1:11
-
@Andrew Por lo que he leído y hasta donde yo sé, todo
cache:clear
lo que hace es eliminar los archivos almacenados en caché. En cuanto a su segundo punto, ¿podría ser miembro de sudo localmente?– Precastico
20 de marzo de 2018 a las 9:30
-
Buscando en Illuminate\Cache\FileStore.php, qué sucede en caso de un
flush
es que cada directorio a continuaciónframework/cache/data
se elimina Por lo tanto, estoy usandorm -rf framework/cache/data/*
que también evita que se elimine la carpeta de caché interna .gitignore.– panpeter
10 de abril de 2018 a las 11:13
-
Una nota: hacer la respuesta corta a veces puede causar problemas con la eliminación
.gitignore
archivos Si es posible, prefiero y encuentro más seguro simplemente hacersudo php artisan cache:clear
si es un problema de permisos.– Desarrollador de verano
12 abr 2021 a las 18:16
leonardo cabre
Puedes probar:
php artisan config:cache
Resuelve la mayoría de mis problemas.
-
Gracias, pero no hay suerte aquí. No resolvió el problema.
– congelado
8 de agosto de 2017 a las 15:55
-
Hay varios cachés en Laravel &
config:cache
solo borra y almacena en caché los archivos de configuración de la aplicación. Los archivos de caché creados por el método Cache::remember() son lo quecache:clear
debería estar despejando.config:cache
no es relevante para el problema de los OP.– Precastico
24 de noviembre de 2017 a las 17:25
También puedes usar Tinker:
php artisan tinker
Cache::store("file")->flush()
Me encontré con un problema similar recientemente. Los archivos de caché creados a través de Cache
la fachada parece persistir incluso después de correr php artisan cache:clear
y como lo mencionó @Precastic, resultó ser un problema de permiso de archivo.
En lugar de eliminar los archivos/carpetas manualmente, solo ejecuté el mismo comando con privilegios de administrador como este
sudo php artisan cache:clear
Y funcionó para mí. Espero que esto ayude a alguien.
conseguiste encontrar una solucion? estoy enfrentando el mismo problema y sin suerte
– Rafay
26 mayo 2019 a las 21:27