Files
Gnuboard7/config/env-priority.php
T
HeuJung 381fcc4e0b feat(core,admin_basic): .env 키 단위 우선 모드 추가
관리자 환경설정 저장값이 config 를 덮는 기존 설계는 공유호스팅을 1차 대상으로
삼은 결과다. .env 를 배포 기준값으로 관리하는 설치에서는 그 설계가 반대로
작동해, 설치기가 defaults 를 시드하는 순간부터 .env 의 28개 항목이 오류도
로그도 없이 사문화된다.

G7_ENV_PRIORITY 옵트인으로 그 소유권을 키 단위로 되돌린다. 스위치를 켜지 않은
설치는 전 경로가 조기 return 이라 동작이 100% 동일하다.

명시 여부는 config 빌드 시점에 캡처한다 — 런타임 env 는 config:cache 환경에서
null 로 고정되어 판정이 영구 미발동한다(attachment.disk_explicit 와 같은 함정).
판정은 strict 라 APP_DEBUG=false·REDIS_DB=0 같은 falsy 명시도 명시로 본다.

잠금은 그 키의 주입만 건너뛰는 것이지만, 제거된 키의 부재를 값으로 읽는 자리가
있으면 형제 설정까지 무너진다. 게이트(웹소켓 토글·메일 드라이버·디버그 모드)와
기본값 주입(mailgun.endpoint·ses.region), 형제 폴백(reverb server endpoint),
파생 판정(storage_driver→attachment.disk)을 유효값으로 보정했다.
2026-09-04 10:08:30 +09:00

46 lines
1.8 KiB
PHP

<?php
use App\Support\EnvPriority;
/*
|--------------------------------------------------------------------------
| .env 키 단위 우선 (G7_ENV_PRIORITY)
|--------------------------------------------------------------------------
|
| G7 은 관리자 환경설정(storage/app/settings/*.json)을 운영 SSoT 로 삼고 그 값을
| config() 에 주입한다. 이 스위치를 켠 설치에서는 `.env` 에 값이 명시된 키만
| 그 주입에서 제외되어 `.env` 가 권위를 갖는다. 스위치를 켜지 않으면 아무 것도
| 달라지지 않는다 (기본 OFF — 기존 설치 무영향).
|
| explicit 는 "그 env 변수가 명시되었는가" 만 담는 불리언 맵이다. 값 자체는 이미
| 각 config/*.php 가 env() 로 읽어 갖고 있으므로 여기에 다시 담지 않는다.
|
| 판별을 여기서 캡처하는 이유: env() 직접 호출은 config:cache 환경에서 null 로
| 고정되므로 런타임 판별이 영구 미발동한다 (config/attachment.php 의 disk_explicit
| 와 동형 함정). 이 파일은 config:cache 시점에 평가되어 결과가 캐시에 박제된다.
|
| 명시 판정은 strict 다 — `KEY=` (빈 값)과 미설정만 미명시로 본다. `APP_DEBUG=false`
| 나 `REDIS_DB=0` 처럼 falsy 한 값을 명시한 경우는 명시로 취급한다 (?: 를 쓰면
| 그 값들이 미명시로 오판된다).
|
| `.env` 만 편집한 경우에는 config:cache 를 다시 실행해야 반영된다. 설정 저장 경로는
| SettingsService 가 ConfigCacheHelper 로 재빌드하므로 추가 조치가 필요 없다.
|
*/
$explicit = [];
foreach (EnvPriority::envVars() as $var) {
if (! in_array(env($var), [null, ''], true)) {
$explicit[$var] = true;
}
}
return [
'enabled' => (bool) env('G7_ENV_PRIORITY', false),
'explicit' => $explicit,
];