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

时间:2015-08-19 11:04:09

标签: php laravel env mysqlconnection

我使用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'));  

有时会在laravel_dev网站上返回laravel_production数据库的名称。

我已经对laravel_production数据库名称进行了grep搜索,它不在dev文件夹中。

我有triede转储dir常量( DIR )各个地方,它总是正确的。

有没有人知道可能出错的地方,或者我如何进一步挖掘可能出错的地方?

2 个答案:

答案 0 :(得分:1)

我最近遇到了这个问题,并想分享我在这里学到的东西,因为这是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

我希望这会有所帮助。

答案 1 :(得分:0)

事实证明,dotevn仅适用于项目的开发实例。在生产中,配置文件必须是硬编码的。

https://github.com/vlucas/phpdotenv

“phpdotenv是为开发环境而制作的,通常不应该用于生产。在生产中,应该设置实际的环境变量,这样就不会在每个请求上加载.env文件。”

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

SetEnv DB_DATABASE laravel_stage
SetEnv CACHE_PREFIX  stage

像魅力一样。