Heroku部署Laravel/Vue.js+MongoDB应用推送时提示mysql连接未配置错误
问题原因
报错核心是构建阶段Laravel尝试加载mysql连接,但你的配置中已移除mysql连接配置,触发该问题的常见原因有两个:
- 你提前在本地执行了
php artisan config:cache生成了配置缓存文件,且该文件被提交到了Git仓库。配置缓存会固化你本地执行命令时的环境变量值,如果生成缓存时你的默认连接还是mysql,或者缓存中包含旧的mysql相关配置,推送到Heroku后会直接读取该缓存,不会加载新的配置和Heroku的环境变量。 - Heroku构建阶段执行
composer install的post钩子时,默认不会注入你在Heroku后台配置的运行时环境变量,如果你的代码/依赖包在artisan命令执行时主动调用了数据库连接,就会尝试读取默认的mysql连接。
解决步骤
- 第一步:清除本地配置缓存,删除已提交的缓存文件
本地执行php artisan config:clear,然后检查bootstrap/cache目录,删除除了.gitignore之外的所有文件,确认该目录下的缓存文件已经被加入.gitignore(Laravel默认规则已经包含,如果你修改过需要补加),之后重新提交代码。 - 第二步:修复配置拼写错误
你的config/database.php中MongoDB的dsn配置读取的是env('BD_DNS'),但.env中对应的变量名是DB_DNS,二者不匹配,需要统一变量名,建议改为DB_DSN更符合规范。 - 第三步:添加构建阶段环境变量
登录Heroku后台,进入你的应用设置页,在Config Vars板块添加构建时变量:DB_CONNECTION,值设为mongodb,这样构建阶段执行artisan命令时就能正确读取默认连接配置。 - 可选:调整composer钩子(如果上述步骤仍不生效)
如果构建时不需要执行package:discover,可以临时注释composer.json中post-autoload-dump下的@php artisan package:discover --ansi行,等部署完成后再恢复,或者调整Laravel服务提供者逻辑,避免在构建阶段启动数据库连接。
内容的提问来源于stack exchange,提问作者Liiisey
相关产品推荐
相关产品推荐

