开源项目得一些小维护
其实我那几个特别是工具类得开源项目一致都有维护和更新,但是每次更新得量和要点并不怎么突出所以一致也没写点什么。但是偶尔吗也会碰到一些稍微值得记录的东西,但是又不多所以很多都遗漏掉了。
虽然漏掉得那些也补不回来,我还是对近期得一些维护稍微记录一下吧。虽然近期维护得内容稍微多一些,但是也只能靠记忆回忆一些了。
首先是这个Wordpress得插件项目,我收到一个PR。说是点击菜单会自动登出。但是我看了下PR中的内容,改的都是字符串文本,还有注释和i18n字典得key。这就相当奇怪了,看起来这些都不可能导致登出问题啊。所以这个问题复查也是蛮折腾得。
首先我这里完全不复现这个问题,然后提PR的人说是他的环境是PHP 7。所以我就得去构造环境,但是我构造出的PHP 7环境也不复现。然后提PR的人说dreamhost托管的wordpress能重现这个问题。于是我又去dreamhost折腾了一番。dreamhost的UE十分糟糕。很难弄清怎么使用,等我好不容易完成以后,发现还是不复现。再后来就是提PR得人提了一个缓存系统varnish。然后我突然想到nginx得URL匹配有些人喜欢直接匹配后缀得,说不定这个也是,把.js结尾的文件全部识别为静态文件走缓存了。然后我们的WP-Code-Highlight.js的配置页里,是一个php文件后面跟了一个参数,恰好是.js结束的。于是乎试了一下,提PR的人果然说解决了。
这个BUG其实不能算是我这个插件的问题,但是改掉主要是考虑到很多人写表达式都不会很严谨,估计犯这个错误得人不在少数,所以给他们把这个坑藏一藏吧。
唉这个坑浪费了我10块钱啊。还好现在云服务都是可以按小时计费的。
这是线上有使用得一个redis cluster的C++接入层。并且做了自动重连和错误重试的功能。之前想到的是这种数据服务都是会防火墙只开放内网的嘛,所以并没有做认证的功能。但是后来看到了MangoDB爆发的大规模安全事件。唉,你挡不了使用得小白傻X啊是不?所以还是抽空加一下吧。
其实之前的版本也是可以认证的,就是在on connected得回调里直接发送AUTH命令就可以了。但是这样使用者得自己保证在AUTH前没有其他命令。但是其实这个使用者也保证不了,因为on connected是在成功连接之后触发的,但是在创建context成功后就可以加入命令排队,这样如果底层走重连得重发流程,就没法让用户排一个AUTH命令在新连接的最前面。
所以,我还是加了两个接口,用于在底层创建成功后直接发送AUTH命令。不过目前得实现也比较简单,只是基本能满足需要而已。另外,之所以是两个接口,一个是直接设置密码,另一个是如果在cluster里,可以支持不同的节点给不同得密码。
pbc分支的一系列修改其实并不全是最近改得,不过之前提交的RP被merge进来了,这个RP主要是修复了默认table能被修改的问题。然而后来我又加了一些东东,似乎被一不小心一起merge进去了。大概的patch如下:
RP #80 - 修复默认值的table能够被外部修改的问题
增加了 pbc的build_ios.sh 脚本,用于集成pbc到IOS时,给IOS版本提供静态库
原本其实有个xcode工程可以直接做这件事的,但是那个工程里限定了编译的架构。在集成进项目工程时比较麻烦,而且得手动选一下编译目标架构。特别是OSX下的命令行控制xcode工程非常不便。现有的一些修改xcode工程文件的库(比如mod-xcodeproj)很不稳定。我这里在OSX里的环境会崩溃,并不能成功修改工程。所以就提供一个脚本来直接生成各种架构的.a文件,这样就不用去改工程了,直接扔进去即可。
在别人的解决方案的启发下接入了proto v3,放在新分支 https://github.com/owent-contrib/pbc/tree/proto_v3
主要是proto v3里所有的数字的repeated默认是packed的,然后要处理好显式配成packed=true和packed=false的情况。我参照的那个解决方案主要是这里有点问题,所以我自己写了。
另外似乎pb文件里并不能区分是proto v3还是v2生成的,所以两种方案没法兼容啊,所以新开个分支搞喽。
Unity-IOS脚本化打包和自动构建
这个也是蛮烦得,所以还是记一下吧,特别是以后涉及新配OSX的打包机的时候,有些坑可能还会踩。
以下假定仓库clone的地址放在:$WORKSPACE/Client
首先来一驼配置
然后执行Unity导出工程:
上面得执行命令的类名.执行命令的函数名时自己写的Unity导出函数,这里给个我们ios版本的sample:
好。接下来时问题一:我们XUPorter导出来的xcode得工程里,有个流程里时候地址会出错,所以我写了个文本替换,如果XUPorter导出得文件路径错了就修复一下。
然后问题二:xcode的签名很恶心,有些地方会依赖交互式操作,所以要阻止这个。
然后就可以开始打包了
然后再把各种资源传到远程发布的web server就好了
Last updated
Was this helpful?