闲着蛋疼:将Ghost升级到0.6.2

最近在中文网看到了新版本的Ghost,诱惑我的新功能还比较多。一口气从0.5.x升级到0.6.2(中间参照官网以0.6.0作为过渡版本)。满怀欣喜地上传到ACE,程序就跪了,并展开成了接下来的故事。最新更新,ACE禁用了sqlite3的功能(因为使用了fs),将其替换成mysql就可以正常吐出日志了。


  1. 逃离ACE

    通过日志发现是core/server/update-check.js执行报错,具体到就是这一行:

    'Content-Length': reqData.length

    reqData对象不知道什么原因成了一个undefined,我在本地调试的时候也debug不到这一行。在config.js中添加 updateCheck: false 来取消ghost的检查更新, 然后ACE的日志就傲娇地不吐出一点信息。发工单的时间看了一下通知,ACE开始要收费了,想起阿里系产品高额的费用,心起潜逃之心。

  2. 大变样的BAE

    好像BAE发了一个推广邮件通知我BAE更新,新界面的BAE有种模仿ACE的感觉,不过紫色要是更骚气点就好了。将新代码按老方法上传到BAC后,结果当然是可喜地运行失败,查看报错日志:

    TypeError: Cannot read property 'length' of undefined
      at EventEmitter.removeAllListeners (events.js:262:21)
    

    google到了别人的issue发现,这个Bug在node v0.10.23时修复了,而BAE的线上的node版本为0.10.21,只好发个工单催一下升级。暂时处理这个bug就是先注释掉ghost中的EventListener。

  3. 一点点CSS+jQuery

    ghost做了一个标签的Navigation功能,但是我使用的主题并不能支持,就自己做了一个展示上的。使用Handlebars的Expression{{Navigation}}来嵌入到模板页面,样式就一点一点套用Casper主题的class命名,最外部是一个.nav的ul,里头每一个li放置一个带链接的导航项。文字统一使用灰色,鼠标悬停时采用蓝色,最后调整位置,拉开间距,就变成图片样式了。

    另一个交互优化是在正文中点击图片能展开放大,使用的插件是文件大小最小的lightbox。使用jQuery找到.article-image为图片标签p,里头直接就是img图片,lightbox采用的是a标签里嵌入img图片标签。所以我们不能简单的在.articl-image添加a,在修改最小的条件下,先通过.article-image img找到图片标签,然后调用warp()使用a标签来包装img。注意的是,jQuery每次获得的元素都是一个集,我们通过历遍来实现修改。

    $('.article-image img').each(function(index){
        $(this).wrap('<a href="' +$(this).prop('src')+ '"  rel="lightbox"></a>');
    });
    

    不过,这种方法好像使得打开页面比较慢。比较怀念Angular每个view对应controller来有界限地操作。

    正文的字体大小视力也为了保护视力调大了一点。


最后总结一下,升级花了差不多两个晚上,最近也不会再碰升级的事了,好好玩ec2去。一些小的改进还是保留下来:页面打开的优化;修改core源码,使用整合多个tags资源合并到(很显然不小心就会破坏到RESTful API)来强化Navigation的功能。

最后的最后,希望国内这些公司(阿里云、百度云、京东云...)多多砸钱放在App Engine上,在服务上追赶亚马逊、oceancloud的服务吧。