walkor / webman-framework

webman-framework
116 stars 57 forks source link

env 环境覆盖问题 #95

Open krissss opened 9 months ago

krissss commented 9 months ago

v1.5.1 中将原来的 createUnsafeImmutable 改成了 createUnsafeMutable,这会导致逻辑变更:

Immutable 会以系统环境中的 env 为主,.env 为辅 Mutable 会以.env 为主,系统环境中的 env 为辅

请问这改动是否符合改动预期

个人认为 Immutable 的形式应该更符合使用需求,因为一般在 docker 环境,会通过 env 覆盖 .env 的配置的

如果符合预期,这块目前有没有什么办法能做到动态改变 env 的使用模式

目前使用的折中办法:在 docker 环境下,如果通过 env 传递,那 .env 就不要配置这个参数

walkor commented 9 months ago

一般开发者都是以 .env 为主的,用createUnsafeImmutable的话如果改了.env的配置,reload无法生效,所以改成了createUnsafeMutable

krissss commented 9 months ago

是否可以把 loadEnv 的操作改到 config/app.php 中,这样应用级别可以改这个逻辑,现在放在 bootstrap 里,应用级别不好改(改完下次 framework 升级会被覆盖的)

walkor commented 9 months ago

env不只是用于app.php中,还有数据库等配置

krissss commented 9 months ago

我说的改到 app.php 不是说整块挪到 app.php,是加个配置项,比如:

'env_loader' => function() {
   // load env
}

然后 bootstrap 中使用

if ($envLoader = config('app.env_loader')) {
   $envLoader();
} else {
   // 现在的 load env
}

app 里的这个 config 可能得提前加载,这可能是个问题