laravel - 流明在请求期间不从系统读取环境

标签 laravel ubuntu docker environment-variables lumen

Lumen 5.4、MySql 和 Docker。我在全局 env

中有以下变量
$ printenv
DB_HOST=127.0.0.1
DB_DATABASE=database
etc

.env 在我的项目中也存在,但它们具有不同的值。

如果我输入 tinker env('DB_HOST'),它会打印来自全局环境的值,但是当应用程序运行时,它会从指定的 .env 文件中获取.我认为问题存在于 Laravel\Lumen\Application 中的以下函数中:

/**
 * Load a configuration file into the application.
 *
 * @param  string  $name
 * @return void
 */
public function configure($name)
{
    if (isset($this->loadedConfigurations[$name])) {
        return;
    }

    $this->loadedConfigurations[$name] = true;

    $path = $this->getConfigurationPath($name);

    if ($path) {
        $this->make('config')->set($name, require $path);
    }
}

如何覆盖这些值或使其避免这些情况:isset($this->loadedConfigurations[$name]) ?

最佳答案

我仍然认为,对于我的评论,答案是一样的。如果您希望使用 docker 环境变量而不是本地 .env 变量,那么 config 目录仍然是可行的方法。在这种情况下,您似乎希望以数据库主机 为目标。所以让我们这样做:

在您的 config/database.php 文件中,更改以下内容:

'mysql' => [
    //...
    'host' => getenv('DB_HOST') ?: env('DB_HOST', 'defaultvalue')
] 

然后只通过配置文件引用主机。

config("database.mysql.host");

如果 docker 容器存在,您将从中获取 ENV,否则您将从 .env 文件中获取 DB_HOST 声明。

关于laravel - 流明在请求期间不从系统读取环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44118240/

相关文章:

laravel - 如何使用第二个表 Laravel 的 where ?

ubuntu - 无法使用 Travis-CI 运行可执行文件 - 不确定我做错了什么

macos - Docker使用OSX禁用旧式注册表

php - laravel 5.6 数据表分页不起作用

javascript - 通过 JS Laravel 访问存储目录

javascript - 将字符串从 laravel Controller 转换为 javascript

python - Airflow 安装问题 SyntaxError : Missing parentheses in call to 'print'

c - 如何在 Ubuntu 16.04 的 Codeblocks 13.12 中包含或链接 ncurses/curses 库?

docker - 在rbenv环境中为gem-mecab制作docker镜像时出错

docker - 从宿主机读取redis容器的数据