Laravel 5.0.33 加载了错误的 .env 文件

Laravel 5.0.33 loads wrong .env file

我使用 Laravel 5.0.33,我的服务器上有以下文件夹:

/var/www/laravel_dev/  
/var/www/laravel_stage/  
/var/www/laravel_production/

他们每个人都有自己的 .env 文件和数据库,但出于某种原因,他们每个人有时会加载错误的 .env 文件(比如每 100 个请求一次)。

我认为它加载了错误的 .env 文件,因为当我转储 env 数据库时:

var_dump(env('DB_DATABSE'));  

它有时 return laravel_dev 站点上 laravel_production 数据库的名称。

我已经用 grep 搜索 laravel_production 数据库名称,但它不在 dev 文件夹中。

我试过将 dir 常量 (DIR) 转储到不同的地方,它总是正确的。

有没有人知道哪里出了问题,或者我如何才能进一步深入了解哪里出了问题?

原来dotevn只是针对项目的开发实例。在生产中,必须对配置文件进行硬编码。

https://github.com/vlucas/phpdotenv

"phpdotenv is made for development environments, and generally should not be used in production. In production, the actual environment variables should be set so that there is no overhead of loading the .env file on each request."

我在生产实例上使用 git,所以我的问题解决方案是在服务器上需要的每个实例的每个 vhost 文件中设置环境变量:

SetEnv DB_DATABASE laravel_stage
SetEnv CACHE_PREFIX  stage

很有魅力。

我最近 运行 也遇到了这个问题,想在这里分享我学到的东西,因为这是 Bing/Google 搜索中的最佳结果之一。

如果您 运行 在多线程 Web 服务器上 运行 进行此操作,并且在多人访问服务器之前这不是问题。

长话短说,Laravel 使用的 dotenv 包不是线程安全的。你可以在这里看到关于它的讨论: https://github.com/vlucas/phpdotenv/issues/76

快速修复是 运行:

artisan config:cache

我强烈建议在 .env 文件的顶部添加注释行:

# IMPORTANT! If you change ANYTHING in here make sure to run > artisan config:cache

希望对您有所帮助。