当多个 Laravel 单机项目或 laravel 未读取 .env 文件时数据库冲突
Conflict database when Multiple Laravel Projects on single machine or laravel not reading .env file
我在 windows 10 上使用 xampp。我在这台机器上有多个 laravel 5.2 项目。当我执行项目 1 时,它给我错误 database_project_1.table_of_project_2
table 或视图不存在,但 table table_of_project_2
存在于 database_project_2
中。这个问题很少出现。
下面是 项目 1.env 文件
APP_ENV=local
APP_DEBUG=true
APP_KEY=base64:ratSluNv930gb3wp1UOabW6Ze3jEJn3ixtTX/wgqYZc=
APP_URL=http://project-1.dev/
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database_project_1
DB_USERNAME=root
DB_PASSWORD=j@yshr33r@m
下面是 项目 2.env 文件
APP_ENV=local
APP_DEBUG=true
APP_KEY=base64:XRgQHfYiKPmHtHZ5UbX38KDlBnl/nyBSt+8qnkOISTg=
APP_URL=http://project-2.dev/
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database_project_2
DB_USERNAME=root
DB_PASSWORD=j@yshr33r@m
我尝试了以下命令但没有成功:
php artisan config:clear
php artisan cache:clear
请查看以下截图:
如有遗漏,请告诉我。
这是两个项目的 config/database.php
代码。
项目 1 config/database.php
<?php
return [
'fetch' => PDO::FETCH_CLASS,
'default' => env('DB_CONNECTION', 'mysql'),
'connections' => [
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'database_project_1'),
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', 'j@yshr33r@m'),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
'engine' => null,
],
],
'migrations' => 'migrations',
'redis' => [
'cluster' => false,
'default' => [
'host' => env('REDIS_HOST', 'localhost'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
],
],
];
项目 2 config/database.php
<?php
return [
'fetch' => PDO::FETCH_CLASS,
'default' => env('DB_CONNECTION', 'mysql'),
'connections' => [
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'database_project_2'),
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', 'j@yshr33r@m'),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
'engine' => null,
],
],
'migrations' => 'migrations',
'redis' => [
'cluster' => false,
'default' => [
'host' => env('REDIS_HOST', 'localhost'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
],
],
];
看看代码,让我知道任何需要的东西。
读取.env
文件有问题还是与另一个项目的.env
文件冲突?
您已指定在项目 2 的 config/database.php
中使用 database_project_1
:
'database' => env('DB_DATABASE', 'database_project_1'),
因此,如果 env('DB_DATABASE')
没有 return 值,将使用默认值 database_project_1
。这可能取决于缓存,如这里的几个问题所述:, , .
如果是缓存问题,您可以尝试通过以下组合(因安装和版本而异)来修复该问题:
php artisan config:clear
php artisan cache:clear
composer dump-autoload
// restart your web server
但最简单的解决方法当然是在项目 2 中使用正确的默认值 config/database.php
:
'database' => env('DB_DATABASE', 'database_project_2'),
在生产环境中,我们应该使用 cache
进行配置,不应在运行时使用 env('xxx')
。
如果你喜欢使用env
功能,我建议每个项目使用不同的名称
DB_DATABASE_PROJECT1=pro1
DB_USERNAME_PROJECT1=user1
DB_PASSWORD_PROJECT1=xxx
和
'database' => env('DB_DATABASE_PROJECT1', 'project_1'),
...
缓存
php artisan cache:clear
php artisan view:clear
php artisan route:clear
php artisan clear-compiled
php artisan config:cache
php artisan route:cache
我在 windows 10 上使用 xampp。我在这台机器上有多个 laravel 5.2 项目。当我执行项目 1 时,它给我错误 database_project_1.table_of_project_2
table 或视图不存在,但 table table_of_project_2
存在于 database_project_2
中。这个问题很少出现。
下面是 项目 1.env 文件
APP_ENV=local
APP_DEBUG=true
APP_KEY=base64:ratSluNv930gb3wp1UOabW6Ze3jEJn3ixtTX/wgqYZc=
APP_URL=http://project-1.dev/
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database_project_1
DB_USERNAME=root
DB_PASSWORD=j@yshr33r@m
下面是 项目 2.env 文件
APP_ENV=local
APP_DEBUG=true
APP_KEY=base64:XRgQHfYiKPmHtHZ5UbX38KDlBnl/nyBSt+8qnkOISTg=
APP_URL=http://project-2.dev/
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database_project_2
DB_USERNAME=root
DB_PASSWORD=j@yshr33r@m
我尝试了以下命令但没有成功:
php artisan config:clear
php artisan cache:clear
请查看以下截图:
如有遗漏,请告诉我。
这是两个项目的 config/database.php
代码。
项目 1 config/database.php
<?php
return [
'fetch' => PDO::FETCH_CLASS,
'default' => env('DB_CONNECTION', 'mysql'),
'connections' => [
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'database_project_1'),
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', 'j@yshr33r@m'),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
'engine' => null,
],
],
'migrations' => 'migrations',
'redis' => [
'cluster' => false,
'default' => [
'host' => env('REDIS_HOST', 'localhost'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
],
],
];
项目 2 config/database.php
<?php
return [
'fetch' => PDO::FETCH_CLASS,
'default' => env('DB_CONNECTION', 'mysql'),
'connections' => [
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'database_project_2'),
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', 'j@yshr33r@m'),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
'engine' => null,
],
],
'migrations' => 'migrations',
'redis' => [
'cluster' => false,
'default' => [
'host' => env('REDIS_HOST', 'localhost'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
],
],
];
看看代码,让我知道任何需要的东西。
读取.env
文件有问题还是与另一个项目的.env
文件冲突?
您已指定在项目 2 的 config/database.php
中使用 database_project_1
:
'database' => env('DB_DATABASE', 'database_project_1'),
因此,如果 env('DB_DATABASE')
没有 return 值,将使用默认值 database_project_1
。这可能取决于缓存,如这里的几个问题所述:
如果是缓存问题,您可以尝试通过以下组合(因安装和版本而异)来修复该问题:
php artisan config:clear
php artisan cache:clear
composer dump-autoload
// restart your web server
但最简单的解决方法当然是在项目 2 中使用正确的默认值 config/database.php
:
'database' => env('DB_DATABASE', 'database_project_2'),
在生产环境中,我们应该使用 cache
进行配置,不应在运行时使用 env('xxx')
。
如果你喜欢使用env
功能,我建议每个项目使用不同的名称
DB_DATABASE_PROJECT1=pro1
DB_USERNAME_PROJECT1=user1
DB_PASSWORD_PROJECT1=xxx
和
'database' => env('DB_DATABASE_PROJECT1', 'project_1'),
...
缓存
php artisan cache:clear
php artisan view:clear
php artisan route:clear
php artisan clear-compiled
php artisan config:cache
php artisan route:cache