說(shuō)到Y(jié)aconf, 從我14年進(jìn)入WB就開(kāi)始用了。確實(shí)幫助我們解決了很多問(wèn)題,但同時(shí)我們理解不全,也碰到了一些情況,現(xiàn)在說(shuō)說(shuō)這些內(nèi)容。
專(zhuān)注于為中小企業(yè)提供成都做網(wǎng)站、網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)黟縣免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了超過(guò)千家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
關(guān)于yaconf的介紹,我就不解釋了,請(qǐng)看 Laruence 的這篇文章。
http://www.laruence.com/2015/06/12/3051.html
Yaconf是php的一個(gè)擴(kuò)展,。沒(méi)有獨(dú)立的進(jìn)程守護(hù), 內(nèi)存中的配置信息不能單獨(dú)存在,主要是為web應(yīng)用服務(wù)的。
根據(jù)php-fpm的運(yùn)行原理,Yaconf在PHP_MINIT_FUNCTION函數(shù)里面初始化配置,然后在PHP_RINIT_FUNCTION函數(shù)里面根據(jù)條件更新配置。這樣當(dāng)一個(gè)web請(qǐng)求時(shí),會(huì)觸發(fā)PHP_RINIT_FUNCTION這個(gè)函數(shù),從而自動(dòng)根據(jù)條件更新配置。
Yaconf首先檢測(cè)的是配置文件夾的修改時(shí)間,曾經(jīng)碰到過(guò)一種情況,當(dāng)用fwrite更改寫(xiě)入文件內(nèi)容的時(shí)候,文件夾的mtime是不會(huì)變化的,此時(shí)如果把文件夾推到線上,會(huì)因?yàn)榕渲梦募A的st_mtime沒(méi)有變化而導(dǎo)致配置沒(méi)有生效。
臨時(shí)解決方案:推送之前,更改配置文件夾的mtime。
這個(gè)問(wèn)題應(yīng)該不是Yaconf本身的問(wèn)題,某一次時(shí)候,admin管理后臺(tái)空間不足。某個(gè)配置文件生成的時(shí)候,沒(méi)有寫(xiě)入。造成為空的情況,進(jìn)而上傳到服務(wù)器上造成錯(cuò)誤。
解決方案:生成ini配置文件的時(shí)候,進(jìn)行腳本檢測(cè)。如果為空,則不生成ini文件。上傳的時(shí)候進(jìn)行腳本檢測(cè),當(dāng)有大小為0的空文件,則不進(jìn)行上傳(不是最好的解決方案, 逐步完善中)。
如上內(nèi)容, 如果值是英文字母或者數(shù)字沒(méi)有問(wèn)題,如果是漢字,或者其中帶有括號(hào)等內(nèi)容,生成的配置文件就不生效了。所以 我們每個(gè)值都用雙引號(hào)括了起來(lái)。轉(zhuǎn)移特殊的字符。
正確的寫(xiě)法a.b = "(測(cè)試ok)"
錯(cuò)誤的寫(xiě)法
a.b = (測(cè)試ok)
這個(gè)問(wèn)題是我在做某運(yùn)動(dòng)項(xiàng)目中碰到的,當(dāng)時(shí)后臺(tái)可以自定義字段,即數(shù)據(jù)字典前移。產(chǎn)品可以直接在表單上追加字段。一個(gè)新的PM,于是把帶有括號(hào)的字符串,作為了key。這樣生成的ini中就含有帶特殊字符的key。配置文件同步到線上的時(shí)候,基本上只剩下找鍋的工作了。
如:(abc) = "出bug了"
5. 降級(jí)文件采用Yaconf讀取ini文件
這個(gè)事實(shí)上還是沒(méi)有理解Yaconf的原理,使用操作不當(dāng)造成的。降級(jí)的時(shí)候,上傳了降級(jí)的配置ini文件,實(shí)施了降級(jí)。但是結(jié)束后,直接刪掉了降級(jí)的a. ini文件。而線上環(huán)境又沒(méi)有經(jīng)過(guò)大重啟(M_SHUTDOWN)。 當(dāng)每次request來(lái)的時(shí)候,即使會(huì)檢測(cè)配置的目錄里面的文件,也會(huì)因?yàn)闆](méi)有降級(jí)文件a, 而不會(huì)更新內(nèi)存中a對(duì)應(yīng)的配置。
解決方案:上傳a.ini文件,但是里面可以寫(xiě)一項(xiàng)其他內(nèi)容?;蛘卟徊捎肶aconf讀取文件。
Yaconf相對(duì)其他擴(kuò)展來(lái)說(shuō),源代碼還是比較容易讀懂的。閑的時(shí)候可以認(rèn)真讀一讀,對(duì)你有幫助。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。