Laravel 8部署Heroku执行php artisan optimize的缓存文件问题
解决方案
一、Heroku 环境运行php artisan optimize的两种方式
- 临时调试执行:安装Heroku CLI工具后,在本地终端执行
heroku run php artisan optimize --app 替换为你的Heroku应用名即可直接在运行的实例中执行命令,但这种方式生成的缓存存放在dyno的临时文件系统中,只要dyno重启、重新部署,缓存就会被清空,无法长期保留。 - 部署自动执行(长期生效方案):将命令配置到Heroku的构建流程中,具体操作是修改项目根目录的
composer.json文件,在scripts节点下新增post-install-cmd配置:
{ "scripts": { "post-install-cmd": [ "@php artisan optimize", // 保留composer原有的其他post-install命令不要删除 ] } }
二、解决缓存文件自动丢失、生成失败的问题
你之前操作后没有生成缓存,大概率是两个配置问题:
- 不要把项目
bootstrap/cache目录加入.gitignore,即使目录为空也要提交到GitHub仓库,不然构建阶段找不到对应目录会导致缓存生成失败。 - 不要在
.gitignore中添加bootstrap/cache/*.php的忽略规则,构建阶段生成的缓存文件会被打包到应用的dyno基础镜像中,不是运行时生成的临时文件,后续dyno重启也不会被删除。
注意事项
Laravel 8的optimize命令会同时生成配置缓存和路由缓存,要确保你的项目代码中所有调用环境变量的地方都用config()助手函数,不要直接用env()函数,否则配置缓存生成后env()调用会返回null,导致业务异常。
内容的提问来源于stack exchange,提问作者Phạm Tiến Hải
相关产品推荐
相关产品推荐

