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/