很多時(shí)候,我們都會(huì)把關(guān)鍵信息放在一處進(jìn)行配置,如:通過 .env 來配置 app_debug 開關(guān)或數(shù)據(jù)庫信息等,方便管理及部署。
我們通常有兩種或多種環(huán)境用于開發(fā)或生產(chǎn),并在部署時(shí)使用對應(yīng)的配置文件。
但如果我們只用一個(gè)配置文件,并期望在啟動(dòng)命令中通過輸入?yún)?shù)的方式,來決定啟用開發(fā)還是正式環(huán)境,該如何處理呢?下面給大家分享下自己的方法,僅供參考。
1. 方便 在一個(gè)配置中使用多個(gè)環(huán)境
2. 方便 在啟動(dòng)時(shí)啟用某個(gè)環(huán)境
3. 同樣適用于 docker 和 supervisor 部署
1. 需要修改框架的原始文件(start.php)
2. 不適用于 windows 上的 php windows.php 命令
composer require vlucas/phpdotenv
服務(wù)配置:
應(yīng)用配置:
// 解析命令行啟動(dòng)參數(shù)
foreach ($argv as $key=>$value) {
// 寫入環(huán)境變量
if( $value==='-e' && array_key_exists(($key+1), $argv) && str_contains($argv[($key+1)], '=') ) {
putenv($argv[($key+1)]);
}
}
// 解析命令行啟動(dòng)參數(shù)
foreach ($argv as $key=>$value) {
// 寫入環(huán)境變量
if( $value==='-e' && array_key_exists(($key+1), $argv) && str_contains($argv[($key+1)], '=') ) {
putenv($argv[($key+1)]);
}
}
測試:php start.php start -e APP_ENV=DEV
正式:php start.php start -e APP_ENV=PROD
流程上大致以下步驟:
1. 通過 .evn 的 APP_ENV 來區(qū)別開發(fā)環(huán)境
2. 在框架的 start.php 及 windows.php 中,獲取命令行上的 -e 參數(shù)并寫入環(huán)境變量
3. 寫入的環(huán)境變量,會(huì)覆蓋掉 .env 中的配置
實(shí)際上,通過該方式,可以覆蓋 .env 中的所有配置。該方案在 windows 及 linux 均已測試。使用 docker 還是 supervisor 部署,是一樣的。
執(zhí)行 composer update,會(huì)更新框架及所有的包,這種情況下,只能再重寫 start.php 了。另外,為了避免不必要的風(fēng)險(xiǎn),建議盡量限制版本約束,以避免意外更新到不兼容的版本。
好像運(yùn)行 composer update , 就會(huì)重新生成 start.php , 之前的修改就會(huì)丟失, 怎么辦 ?