【问题标题】:Laravel 5.0.33 loads wrong .env fileLaravel 5.0.33 加载错误的 .env 文件
【发布时间】:2015-11-12 15:32:04
【问题描述】:

我使用 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 文件夹中。

我已经尝试将 dir 常量 (DIR) 转储到各个地方,它总是正确的。

有没有人知道可能出了什么问题,或者我可以如何进一步挖掘可能出了什么问题?

【问题讨论】:

    标签: php laravel env mysqlconnection


    【解决方案1】:

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

    https://github.com/vlucas/phpdotenv

    "phpdotenv 是为开发环境制作的,一般不应该在生产中使用。在生产中,应该设置实际的环境变量,这样就不会在每次请求时加载 .env 文件的开销。"

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

    SetEnv DB_DATABASE laravel_stage
    SetEnv CACHE_PREFIX  stage
    

    像魅力一样工作。

    【讨论】:

    • dotenv 并不是用于开发实例。它是一个特定于环境的配置文件。我在我所有的环境中都使用它,它就像一个魅力。您的 .envfile 是否已提交到 git 存储库?然后可以覆盖部署。如手册中所述,它必须从您的 vcs 中排除。 vhosts env 的工作方式相同,是一个可行的解决方案。 .env 的原因是使用较低的配置文件。您可以通过 ftp 对其进行编辑。它不需要特殊权限
    • 正如我在问题中所说,每个实例都有自己的 .env 文件,因此被排除在 vc 之外。为了更清楚,我添加了一个文档链接。
    【解决方案2】:

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

    我希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2017-06-25
      • 2019-02-22
      • 2020-06-19
      • 1970-01-01
      • 1970-01-01
      • 2020-03-26
      • 2018-06-05
      • 2019-02-12
      • 2021-08-29
      相关资源
      最近更新 更多