为每个Laravel/Homestead项目配置独立数据库遇阻求助
我之前折腾Homestead多站点的时候也碰到过一模一样的坑,给你几个亲测有效的排查和解决步骤:
先确认虚拟机内的环境变量与配置缓存
你是通过SSH进入虚拟机执行迁移的,这里很容易踩的坑是:虚拟机里的环境变量或者Laravel的配置缓存,会覆盖你本地.env的设置。
先在虚拟机的项目根目录下执行echo $DB_DATABASE,看看输出是不是boomer——如果不是,说明虚拟机里的环境变量没正确加载,得检查虚拟机内的.env文件是不是和本地同步了(Homestead默认会同步,但有时候手动修改后需要重新provision)。
另外,Laravel的配置缓存会导致新的配置不生效,先执行php artisan config:clear清除缓存,再跑迁移试试。检查Homestead.yaml的站点-数据库映射
打开你的homestead.yaml,一定要确保sites部分的每个站点都正确绑定了对应的数据库,比如:sites: - map: your-boomer-site.test to: /home/vagrant/code/boomer/public database: boomer # 这个字段一定要加上,让Homestead把站点和数据库关联起来 databases: - homestead - boomer改完之后必须执行
vagrant reload --provision,让虚拟机重新加载配置,这一步很容易忘!纠正虚拟机内的数据库端口配置
你的本地.env里写的端口是33060,这是宿主机用来连接虚拟机数据库的端口,但虚拟机内部连接数据库应该用默认的3306(因为端口映射是宿主机33060 → 虚拟机3306)。所以虚拟机里的.env文件,DB_PORT应该设为3306,而不是33060。
你可以直接在虚拟机里登录数据库验证:执行mysql -u homestead -psecret,然后输入USE boomer;,再跑SHOW TABLES;看看是不是空的——如果是空的,说明数据库本身没问题,是迁移命令的连接配置错了。迁移时明确指定数据库连接
如果上面的步骤都排查过了,还是没解决,试试在迁移命令里强制指定连接:php artisan migrate --database=boomer前提是你在
config/database.php里已经正确配置了boomer的连接信息,比如:'connections' => [ // ... 其他连接 'boomer' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', 'boomer'), 'username' => env('DB_USERNAME', 'homestead'), 'password' => env('DB_PASSWORD', 'secret'), ], ],
内容的提问来源于stack exchange,提问作者Mohamed Kira

