修复rake aborted以及lsi warning问题

100
TaoAlpha
2015-06-101507 words5 minutes to read

缘起

昨天升级了下ruby, 从2.0.0到2.2.2, 升级完jekyll, bundle等均完好无损, 当打包完一些更改push到github后, 想要用rake自动发布的时候发现rake不工作了…

修复Rake

错误信息

在jekyll跟目录运行rake后出现:

rake aborted!
require: cannot load such file – jekyll

错误代码指示在Rakefile的require “Jekyll” 一行.

错误原因猜测

回忆了以下之前所有设计到jekyll和rake的操作就是ruby的升级了. 所以猜测应该是ruby升级所致. Google后没有找到合适的解答. 于是就自己折腾分析了一下, 猜测主要可能在与:

  • ruby版本号已经从2.0.0提升到2.2.2, 但是bundle show jekyll的时候还是提示的是2.0.0的目录;

修复方式

我首先尝试了利用gem重新安装jekyll, 然后利用其路径验证问题是否是版本号的原因, 但是发现gem install jekyll命令一直处于卡死状态. 无论我切换淘宝ruby源还是自有源都无效. 猜测gem也出了一些问题.

接下来我尝试重新安装ruby 2.0.0, 试图恢复升级前的环境, 结果依然失败…

于是我又彻底卸载了ruby, 重新用homebrew安装了ruby最新的2.2.2版本, 并且清楚了bundle的gems目录(里面那个2.0.0的目录), 然后重新安装了bundler, 再用bundler去恢复了所有的gems.

成功!! 具体原因真心不知, Google没有找到解答, 只能自己瞎分析了, 如果有哪位知道原因, 记得告诉我哦

jekyll lsi warning问题

问题描述

成功修复了rake后, 心情大好, 再次开启jekyll准备记录以下这一过程~ 结果就发现build的时候出现大量的warning信息… 发现是lsi建立索引的那一步出的问题, 问题如下:

warning: Comparable#== will no more rescue exceptions of #<=> in the next release.
warning: Return nil in #<=> if the comparison is inappropriate or avoid such comparison.

当前环境:

jekyll (2.5.3)
classifier-reborn (2.0.3)
rb-gsl (1.16.0.4)

修复问题

这次Google了下找到了一个遭遇相同的兄弟! 哈哈

Fix lsi.rb Comparable#== warning #33

根据解答, 大意就是需要替换出错行(237行)的pair[0] == doc判断为 pair[0].eql? doc.

why? 于是我查了下ruby中eql?==的区别:

== — generic “equality”

最常用的相等判断, 属于值判断;

eql? — Hash equality

The eql? method returns true if obj and other refer to the same hash key. 一般Hash对象都会使用eql?来判断其成员之间的相等与否. 当然此外, 在数字判断上, ==eql?的区别也有点像严格判断(1 和 1.0, 后者就会判断为false);

虽然稀里糊涂, 但感觉很有道理的样子.. 传说中的不明觉厉吗…