Laravel 更新后抛出“bootstrap/cache directory must be present and writable”错误
Posted
技术标签:
【中文标题】Laravel 更新后抛出“bootstrap/cache directory must be present and writable”错误【英文标题】:Laravel throws 'The bootstrap/cache directory must be present and writable' error after update 【发布时间】:2017-09-28 19:50:02 【问题描述】:我使用了“composer update”,它更新了一些软件包。在更新过程中,网站仍然可以运行。但是,在它显示“已编译的服务文件已被删除”之后,网站并没有加载,而是显示:
Exception in ProviderRepository.php line 190:
The bootstrap/cache directory must be present and writable.
最奇怪的是,当我再次运行“composer update”时,网站再次开始工作,直到已编译的服务文件被删除,此时它再次抛出相同的错误。我已经尝试了出现此错误时应该做的通常的事情(chown -R all to the right user/group and chmod all files and folder 664 and 775)。
我不知道该怎么做了,因为错误似乎不“正确”..
【问题讨论】:
我忘了说'composer update' 也更新了 laravel 框架,从 5.4.18 到 5.4.21 就我而言mkdir -p bootstrap/cache/ && sudo chown -R user bootstrap/cache/
【参考方案1】:
在运行 composer update 后试试这个:
php artisan cache:clear
【讨论】:
Waaaay 为时已晚,但这是简单的解决方案。我忘了告诉你,但谢谢! 此处适合发出警告。在生产停止运行它之前,问问自己是否真的想彻底清除缓存。否则,您最终可能会像发生在我身上一样瘫痪您的应用程序。 不工作?我在引导文件夹中没有缓存文件夹 你真的救了我的命! 另外,如果这个解决方案不能立即工作 - 检查你是否有类似 OPCache 的运行,你可能需要重新启动你的 PHP-FPM/清除你的 OPCache 缓存。 :)【参考方案2】:在你的 Laravel 目录文件上,运行:
sudo chmod -R 777 bootstrap/cache/
【讨论】:
我很确定 777'ing Web 服务器上的任何文件夹在安全方面都不是一个好主意。此外,775 应该而且已经奏效了。 对不起,我不清楚。 775 过去工作过。目前我仍然有同样的问题,正如我在原帖中所说,我已经尝试了 775'ing 和 664'ing 一切。问题正是:我修复了错误所说的应该修复的内容,但我仍然遇到同样的问题。 必须是sudo chmod -R 777 bootstrap
然后才能正常运行。【参考方案3】:
短版:如果使用类似 AWS eb cli 的方式上传,请验证 bootstrap/cache 文件夹(不是说其内容)是否正在部署。
我的回答背后的一些背景
我正在使用 Amazon Web Services 的 Elastic Beanstalk 来托管我的 Laravel 项目。当我刚开始使用 Laravel 时,我对其功能并没有太多了解。两天前,我的新部署都在中途因 OP 的错误消息而崩溃。
那天早些时候,我意识到我没有使用
php artisan config:cache
缓存配置以加快速度。我在 composer.json 的“post-install-cmd”和“post-update-cmd”子句中添加了相同的内容。 我还在 .ebignore 文件中添加了不上传 /bootstrap/cache 内容的声明(因为它的内容取决于环境aka 我的本地主机配置在我的生产服务器上没有意义) facepalm 我没有意识到这会阻止 bootstrap/cache 文件夹被上传(就像 git 一样,eb cli 会忽略空文件夹)。 所以,当我在晚上开始部署时,部署本来是要崩溃的。 所以,现在我刚刚在 bootstrap/cache 中放置了空占位符(比如).gitkeep 文件。部署再次开始工作:) (虽然问题很简单,但我在 ssh-ing 并挖掘 EBS EC2 实例睡了几个小时后才意识到原因~.~)
【讨论】:
如果您能告诉我为什么您否决了我的回答,您将非常感激。因为据我所知,它解决了特定出现的问题。【参考方案4】:解决此错误的最佳方法是: 1.打开你的项目文件夹 2.移动到引导目录 3.创建一个名为“缓存”的空文件夹 4.然后做php artisan cache: clear 这肯定会起作用
【讨论】:
【参考方案5】:我在 Windows 10 上以非提升模式(非管理员)使用 cmder。 命令 php artisan cache:clear 对我不起作用。 文件夹 bootstrap/cache 不存在。 我创建了该文件夹并从 bootstrap 和 bootstrap/cache 文件夹中删除了只读。 composer install 和 composer update 现在都可以正常工作了。
【讨论】:
【参考方案6】:对我来说,我在 bootstrap 中手动创建了缓存文件夹。
【讨论】:
【参考方案7】:sudo chmod -R ug+rwx storage bootstrap/cache
希望这能解决问题。
【讨论】:
【参考方案8】:它适用于我在项目文件夹中运行
sudo chmod -R 777 bootstrap/cache
比运行
composer update
比运行
cache:clear
【讨论】:
不是 bootstrap/cash 而是 bootstrap/cache【参考方案9】:在你运行作曲家更新后也试试这个:
php artisan config:clear
【讨论】:
【参考方案10】: 首先确保bootstrap/cache
目录存在,如果不创建一个新目录
mkdir -p bootstrap/cache/
然后运行php artisan config:cache
【讨论】:
【参考方案11】:简单。有些应用程序可以阻止目录。像 google 驱动器同步器、One 驱动器同步器或任何其他使用 Windows 资源管理器的应用程序。
删除缓存文件夹。再次创建它。
【讨论】:
【参考方案12】:尝试在你的项目根目录中执行以下命令
composer update
然后做
composer dumpautoload
这将避免弄乱缓存文件的必要性 这可能会导致全新的问题
【讨论】:
【参考方案13】:我不认为我之前做错了什么,并且没有任何与现金清算相关的游戏有意义。但正如它声称的那样, /bootstrap 内没有“缓存”文件夹。必须手动创建它。现在一切都好起来了
【讨论】:
【参考方案14】:我必须创建这五个文件夹才能再次运行 artisan。
mkdir bootstrap/cache
mkdir storage/framework
mkdir storage/framework/cache
mkdir storage/framework/views
mkdir storage/framework/sessions
在这个相关问题中找到了答案: "Please provide a valid cache path" error in laravel
【讨论】:
【参考方案15】:如果使用 Web 服务器(例如 Apache 或 Nginx)作为前端,解决方案是将目录 bootstrap/cache
归 Web 服务器组所有.对于 Nginx:
$ sudo chgrp -R nginx bootstrap/cache
【讨论】:
以上是关于Laravel 更新后抛出“bootstrap/cache directory must be present and writable”错误的主要内容,如果未能解决你的问题,请参考以下文章
Ruby on Rails Rake在将rails项目从4.1.9更新到4.2.0后抛出“不正确的表名”错误