修复rake aborted以及lsi warning问题
缘起
昨天升级了下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);
虽然稀里糊涂, 但感觉很有道理的样子.. 传说中的不明觉厉吗…