ruby mixin的硬伤

今天执行一个页面的的时候发现日志输出了50行的"==> Got Users::User from cache. (0.00000)",觉得很奇怪,没有请求这么多次user啊,分析到后面发现原来是gettext跟cache_fu着两个插件的冲突引起的

他们的方法都是mixin到model中调用,都有一个cache?的方法,gettext的是判断是否cache i18n message,cache_fu的是判断是否cache model,结果gettext的cache?被cache_fu的cache?覆盖了,gettext内部调用了多次cache?就出现了上述的症状,虽然执行结果正常,但背后的行为跟期望的已经是大相径庭了,而且这样的情况还无法通过test来检查,这里要不是默认打开cache_fu的benchmark,根本就不知道问题所在

这样用mixin的时候都要小心了,不知道还有多少隐患,估计ruby以后应该会有相应的解决方案,例如在mixin的时候检查同名方法并产生警告
也给一个写module的建议,只暴露必要的方法,内部的调用还是用一个专有namespace分开
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值