Laravel拉取Git代码后不清缓存遇权限错误的解决方法
问题描述
在Laravel应用中,希望无需先清除缓存就从GitHub拉取最新代码,执行命令:
git pull origin staging
但拉取后访问页面会出现如下权限错误:
ErrorException (E_WARNING) file_put_contents(/path/to/laravel/storage/framework/cache/data/30/6c/306cbe845aa9840ab0c14a1cd4b5d83fd6728839): failed to open stream: Permission denied
执行php artisan cache:clear可以解决问题,但项目大量依赖缓存(每次请求都需要),每次更新都清缓存会影响性能——比如仅修改视图文件时,完全不需要改动现有缓存。需要找到不清缓存就能拉取代码且不报错的方法。
解决方案
修复缓存目录权限
拉取代码后,直接修复storage/framework/cache目录的权限,让Web服务器用户(如www-data、nginx)和Git执行用户拥有该目录的读写权限。执行命令:chown -R www-data:www-data storage/framework/cache # 或用权限掩码确保组可读写 chmod -R g+rw storage/framework/cache这样既能保留现有缓存文件,又能让应用正常读写缓存,避免权限被Git拉取操作意外覆盖。
将缓存目录加入Git忽略
把缓存目录添加到项目根目录的.gitignore文件中,防止Git追踪缓存目录的内容和权限变化:# 在.gitignore中添加 storage/framework/cache/此后拉取代码时,Git不会触及缓存目录,现有缓存文件和权限不受影响。
精准拉取需要更新的文件
如果仅修改了视图、配置等特定文件,拉取后可以只重置这些目标文件,完全不触动缓存目录:# 示例:仅拉取更新视图文件 git checkout origin/staging -- resources/views配置Git忽略文件权限变化
编辑Git本地配置,让它忽略文件权限的变更,避免拉取代码时覆盖缓存目录的权限设置:git config core.fileMode false
内容的提问来源于stack exchange,提问作者sveti petar
相关产品推荐
相关产品推荐

