You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 07:03:36