您好,登錄后才能下訂單哦!
說到Yaconf, 從我14年進入WB就開始用了。確實幫助我們解決了很多問題,但同時我們理解不全,也碰到了一些情況,現在說說這些內容。
關于yaconf的介紹,我就不解釋了,請看 Laruence 的這篇文章。
http://www.laruence.com/2015/06/12/3051.html
Yaconf是php的一個擴展,。沒有獨立的進程守護, 內存中的配置信息不能單獨存在,主要是為web應用服務的。
根據php-fpm的運行原理,Yaconf在PHP_MINIT_FUNCTION函數里面初始化配置,然后在PHP_RINIT_FUNCTION函數里面根據條件更新配置。這樣當一個web請求時,會觸發PHP_RINIT_FUNCTION這個函數,從而自動根據條件更新配置。
Yaconf首先檢測的是配置文件夾的修改時間,曾經碰到過一種情況,當用fwrite更改寫入文件內容的時候,文件夾的mtime是不會變化的,此時如果把文件夾推到線上,會因為配置文件夾的st_mtime沒有變化而導致配置沒有生效。
臨時解決方案:推送之前,更改配置文件夾的mtime。
這個問題應該不是Yaconf本身的問題,某一次時候,admin管理后臺空間不足。某個配置文件生成的時候,沒有寫入。造成為空的情況,進而上傳到服務器上造成錯誤。
解決方案:生成ini配置文件的時候,進行腳本檢測。如果為空,則不生成ini文件。上傳的時候進行腳本檢測,當有大小為0的空文件,則不進行上傳(不是最好的解決方案, 逐步完善中)。
如上內容, 如果值是英文字母或者數字沒有問題,如果是漢字,或者其中帶有括號等內容,生成的配置文件就不生效了。所以 我們每個值都用雙引號括了起來。轉移特殊的字符。
正確的寫法a.b = "(測試ok)"
錯誤的寫法
a.b = (測試ok)
這個問題是我在做某運動項目中碰到的,當時后臺可以自定義字段,即數據字典前移。產品可以直接在表單上追加字段。一個新的PM,于是把帶有括號的字符串,作為了key。這樣生成的ini中就含有帶特殊字符的key。配置文件同步到線上的時候,基本上只剩下找鍋的工作了。
如:(abc) = "出bug了"
5. 降級文件采用Yaconf讀取ini文件
這個事實上還是沒有理解Yaconf的原理,使用操作不當造成的。降級的時候,上傳了降級的配置ini文件,實施了降級。但是結束后,直接刪掉了降級的a. ini文件。而線上環境又沒有經過大重啟(M_SHUTDOWN)。 當每次request來的時候,即使會檢測配置的目錄里面的文件,也會因為沒有降級文件a, 而不會更新內存中a對應的配置。
解決方案:上傳a.ini文件,但是里面可以寫一項其他內容。或者不采用Yaconf讀取文件。
Yaconf相對其他擴展來說,源代碼還是比較容易讀懂的。閑的時候可以認真讀一讀,對你有幫助。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。