单个机器或laravel上的多个Laravel项目不读取.env文件时的冲突数据库

时间:2017-06-20 11:29:43

标签: php laravel laravel-5.2 environment-variables laravel-5.1

我在Windows 10上使用xampp。我在这台机器上有多个laravel 5.2项目。当我执行Project 1时,它给出了database_project_1.table_of_project_2表或视图不存在的错误,但table_of_project_2中存在表database_project_2。这个问题很少发生。

以下是 Project 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

以下是 Project 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

我尝试过以下命令,但没有运气:

  1. php artisan config:clear
  2. php artisan cache:clear
  3. 请查看以下截图: Database Confict Error

    如果遗漏任何东西,请告诉我。

    这是两个项目的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 个答案:

答案 0 :(得分:3)

您已指定在项目2的database_project_1中使用config/database.php

'database' => env('DB_DATABASE', 'database_project_1'),

因此,如果env('DB_DATABASE')未返回值,则将使用默认值database_project_1。这可能会发生,具体取决于缓存,如SO中的几个问题所述:example 1example 2example 3

如果是缓存问题,您可以尝试通过以下某种组合来解决这个问题(因安装和版本而异):

php artisan config:clear
php artisan cache:clear
composer dump-autoload
// restart your web server

但肯定最简单的解决方法是在Project 2 config/database.php中使用正确的默认值:

'database' => env('DB_DATABASE', 'database_project_2'),

答案 1 :(得分:0)

在生产中,我们应该使用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