讀了一遍yaconf的源碼,發(fā)現(xiàn)大部分可以理解。在這個(gè)項(xiàng)目上結(jié)合現(xiàn)實(shí)中使用的兩個(gè)場景進(jìn)行進(jìn)行一些小改動(dòng)是個(gè)比較有趣的事情。
創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、鹽邊網(wǎng)絡(luò)推廣、小程序開發(fā)、鹽邊網(wǎng)絡(luò)營銷、鹽邊企業(yè)策劃、鹽邊品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供鹽邊建站搭建服務(wù),24小時(shí)服務(wù)熱線:18980820575,官方網(wǎng)址:muchs.cn
代碼地址:https://github.com/netbird/yaconf
業(yè)務(wù)場景一
在自己的測試環(huán)境,各個(gè)業(yè)務(wù)方要求某個(gè)業(yè)務(wù)的api必須長期指向他們的測試環(huán)境供他們測試。之前做法有修改host(碰到非80端口失靈),修改代碼,修改配置文件。而這套環(huán)境又有新的開發(fā)任務(wù),需要隨時(shí)更新代碼和配置文件,不更新會(huì)導(dǎo)致其他業(yè)務(wù)失敗,所以不能加鎖。經(jīng)常造成代碼和配置覆蓋。不得不重新修改配置文件和代碼滿足之前的測試環(huán)境。。。
因代碼配置文件基于yaconf的。所以修改了下yaconf的源碼,提供了一種小方案。
在不修改配置文件和主項(xiàng)目代碼的情況下。
增加測試模式和測試配置文件目錄。
在yaconf設(shè)置成測試模式下,在directory_test添加自己需要滿足測試需要的配置文件(可以是局部內(nèi)容)。
在讀取配置的時(shí)候 就優(yōu)先讀取測試內(nèi)容,然后在讀取通用配置。
例如:
配置文件:
a.ini的內(nèi)容
a="b"
b="c"
此時(shí)讀取Yaconf::get(‘a(chǎn).a’) 得到的是b。
設(shè)置測試模式,里面測試配置:
a.ini
a="d"
此時(shí)讀取Yaconf::get('a.a') 得到的是d。
當(dāng)然,整體讀取Yaconf::get('a'),會(huì)導(dǎo)致讀取不到a.b的內(nèi)容,具體依據(jù)自己使用的場景。
PS:僅在測試環(huán)境下當(dāng)作練習(xí)使用,不適用所有場景。
業(yè)務(wù)場景二
如何在CLI模式下使用Yaconf
雖然Yaconf更適合web請求場景,不太適合在CLI模式下使用,但是受限與環(huán)境, 歷史(業(yè)務(wù)難分離)等問題,又急切想使用Yaconf怎么辦?
Yaconf的原理是在PHP_MINIT_FUNCTION函數(shù)里面初始化配置,然后在PHP_RINIT_FUNCTION函數(shù)里面根據(jù)條件更新配置。這樣當(dāng)一個(gè)web請求時(shí),會(huì)觸發(fā)PHP_RINIT_FUNCTION這個(gè)函數(shù),從而自動(dòng)根據(jù)條件更新配置。
而CLI模式模式下,如果進(jìn)程不退出,那么只在啟動(dòng)的時(shí)候執(zhí)行一次PHP_MINIT_FUNCTION和PHP_RINIT_FUNCTION,此時(shí)無法更新配置信息。
解決方案:
增加外部觸發(fā)函數(shù),手動(dòng)執(zhí)行更新。即:增加Yaconf::update()方法,在代碼中,適合的位置去執(zhí)行這個(gè)函數(shù),觸發(fā)更新。
當(dāng)然,更新的原則和原理還是跟PHP_RINIT_FUNCTION一樣。
如配置文件:
a.ini
a="b"
代碼:
while(true) {
Yaconf::update();
var_dump(Yaconf::get('a.a'));
}
此時(shí),如果將配置文件改成:
a="c"
則上述程序會(huì)在check_delay(通常5分鐘)后,輸出c(不用退出進(jìn)程,即可更新).
目前,還沒有投入正式環(huán)境。如果大家有這個(gè)使用場景,可以考慮以上方式。
ps: 1. 限于本人能力,僅僅包了個(gè)接口,沒有對內(nèi)部進(jìn)行合并邏輯處理,重在解決問題。
2. 條條大道通羅馬,如果可能,大家也可以使用別的更好的方式。解決問題的方法不唯一。
因能力有限,內(nèi)部解析代碼沒有做改動(dòng)。
文章題目:為Yaconf的添加測試場景(練習(xí)用)
URL鏈接:http://muchs.cn/article36/jsossg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、小程序開發(fā)、用戶體驗(yàn)、網(wǎng)站排名、企業(yè)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)