溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

一些使用Yaconf的經(jīng)驗(yàn)分享

發(fā)布時(shí)間:2020-06-14 09:55:53 來源:網(wǎng)絡(luò) 閱讀:8198 作者:netbird_fly 欄目:web開發(fā)

說到Y(jié)aconf, 從我14年進(jìn)入WB就開始用了。確實(shí)幫助我們解決了很多問題,但同時(shí)我們理解不全,也碰到了一些情況,現(xiàn)在說說這些內(nèi)容。

介紹

關(guān)于yaconf的介紹,我就不解釋了,請(qǐng)看 Laruence 的這篇文章。
http://www.laruence.com/2015/06/12/3051.html

運(yùn)行原理

Yaconf是php的一個(gè)擴(kuò)展,。沒有獨(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ù)條件更新配置。

曾經(jīng)走過的路

1. 文件夾時(shí)間沒有更新

Yaconf首先檢測(cè)的是配置文件夾的修改時(shí)間,曾經(jīng)碰到過一種情況,當(dāng)用fwrite更改寫入文件內(nèi)容的時(shí)候,文件夾的mtime是不會(huì)變化的,此時(shí)如果把文件夾推到線上,會(huì)因?yàn)榕渲梦募A的st_mtime沒有變化而導(dǎo)致配置沒有生效。
臨時(shí)解決方案:推送之前,更改配置文件夾的mtime。
一些使用Yaconf的經(jīng)驗(yàn)分享

2. 文件內(nèi)容為空

這個(gè)問題應(yīng)該不是Yaconf本身的問題,某一次時(shí)候,admin管理后臺(tái)空間不足。某個(gè)配置文件生成的時(shí)候,沒有寫入。造成為空的情況,進(jìn)而上傳到服務(wù)器上造成錯(cuò)誤。
解決方案:生成ini配置文件的時(shí)候,進(jìn)行腳本檢測(cè)。如果為空,則不生成ini文件。上傳的時(shí)候進(jìn)行腳本檢測(cè),當(dāng)有大小為0的空文件,則不進(jìn)行上傳(不是最好的解決方案, 逐步完善中)。

3. 文件內(nèi)容有誤

一些使用Yaconf的經(jīng)驗(yàn)分享

如上內(nèi)容, 如果值是英文字母或者數(shù)字沒有問題,如果是漢字,或者其中帶有括號(hào)等內(nèi)容,生成的配置文件就不生效了。所以 我們每個(gè)值都用雙引號(hào)括了起來。轉(zhuǎn)移特殊的字符。
正確的寫法

a.b = "(測(cè)試ok)"

錯(cuò)誤的寫法

a.b = (測(cè)試ok)

4. 生成的文件內(nèi)容的key有失誤

這個(gè)問題是我在做某運(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í)上還是沒有理解Yaconf的原理,使用操作不當(dāng)造成的。降級(jí)的時(shí)候,上傳了降級(jí)的配置ini文件,實(shí)施了降級(jí)。但是結(jié)束后,直接刪掉了降級(jí)的a. ini文件。而線上環(huán)境又沒有經(jīng)過大重啟(M_SHUTDOWN)。 當(dāng)每次request來的時(shí)候,即使會(huì)檢測(cè)配置的目錄里面的文件,也會(huì)因?yàn)闆]有降級(jí)文件a, 而不會(huì)更新內(nèi)存中a對(duì)應(yīng)的配置。
解決方案:上傳a.ini文件,但是里面可以寫一項(xiàng)其他內(nèi)容?;蛘卟徊捎肶aconf讀取文件。

后記

Yaconf相對(duì)其他擴(kuò)展來說,源代碼還是比較容易讀懂的。閑的時(shí)候可以認(rèn)真讀一讀,對(duì)你有幫助。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI