一些使用Yaconf的经验分享
admin
2023-06-13 08:23:56
0次

说到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这个函数,从而自动根据条件更新配置。

曾经走过的路

1. 文件夹时间没有更新

Yaconf首先检测的是配置文件夹的修改时间,曾经碰到过一种情况,当用fwrite更改写入文件内容的时候,文件夹的mtime是不会变化的,此时如果把文件夹推到线上,会因为配置文件夹的st_mtime没有变化而导致配置没有生效。
临时解决方案:推送之前,更改配置文件夹的mtime。
一些使用Yaconf的经验分享

2. 文件内容为空

这个问题应该不是Yaconf本身的问题,某一次时候,admin管理后台空间不足。某个配置文件生成的时候,没有写入。造成为空的情况,进而上传到服务器上造成错误。
解决方案:生成ini配置文件的时候,进行脚本检测。如果为空,则不生成ini文件。上传的时候进行脚本检测,当有大小为0的空文件,则不进行上传(不是最好的解决方案, 逐步完善中)。

3. 文件内容有误

一些使用Yaconf的经验分享

如上内容, 如果值是英文字母或者数字没有问题,如果是汉字,或者其中带有括号等内容,生成的配置文件就不生效了。所以 我们每个值都用双引号括了起来。转移特殊的字符。
正确的写法

a.b = "(测试ok)"

错误的写法

a.b = (测试ok)

4. 生成的文件内容的key有失误

这个问题是我在做某运动项目中碰到的,当时后台可以自定义字段,即数据字典前移。产品可以直接在表单上追加字段。一个新的PM,于是把带有括号的字符串,作为了key。这样生成的ini中就含有带特殊字符的key。配置文件同步到线上的时候,基本上只剩下找锅的工作了。
如:

(abc) = "出bug了"

5. 降级文件采用Yaconf读取ini文件

这个事实上还是没有理解Yaconf的原理,使用操作不当造成的。降级的时候,上传了降级的配置ini文件,实施了降级。但是结束后,直接删掉了降级的a. ini文件。而线上环境又没有经过大重启(M_SHUTDOWN)。 当每次request来的时候,即使会检测配置的目录里面的文件,也会因为没有降级文件a, 而不会更新内存中a对应的配置。
解决方案:上传a.ini文件,但是里面可以写一项其他内容。或者不采用Yaconf读取文件。

后记

Yaconf相对其他扩展来说,源代码还是比较容易读懂的。闲的时候可以认真读一读,对你有帮助。

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...