一些使用Yaconf的经验分享-创新互联
说到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。
2. 文件内容为空
这个问题应该不是Yaconf本身的问题,某一次时候,admin管理后台空间不足。某个配置文件生成的时候,没有写入。造成为空的情况,进而上传到服务器上造成错误。
解决方案:生成ini配置文件的时候,进行脚本检测。如果为空,则不生成ini文件。上传的时候进行脚本检测,当有大小为0的空文件,则不进行上传(不是最好的解决方案, 逐步完善中)。
3. 文件内容有误
如上内容, 如果值是英文字母或者数字没有问题,如果是汉字,或者其中带有括号等内容,生成的配置文件就不生效了。所以 我们每个值都用双引号括了起来。转移特殊的字符。
正确的写法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相对其他扩展来说,源代码还是比较容易读懂的。闲的时候可以认真读一读,对你有帮助。
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
网站栏目:一些使用Yaconf的经验分享-创新互联
转载源于:http://azwzsj.com/article/dihcdj.html