最近为创建博客而折腾Jekyll运行环境,因此接触到了ruby、gem什么的。在Raspbian下基本根据官网的介绍,没费嘛事儿就跑起来了。理解的依赖关系大致是:

  • jekyll,静态页面框架。
  • liquid、pygments、kramdown等,jekyll使用的模块。
  • github-pages,好吧,用github托管页面的大合集?
  • ruby,上面这些都是ruby的gem(包),可以通过bundle自动获取。
  • nodejs和其他OS基础组件。

所以,配置环境的重点就是ruby、gem、bundle。

OSX下遇到问题

隐约知道OSX下有ruby支持,因为安装更新homebrew就用的ruby脚本。但是为了新点儿,还是用brew install ruby更新了一下,目前的最新版是2.2.2。

然后跑jekyll serve报错,缺kramdown;然后bundle若干、gem若干次、sudo若干次、挂代理尝试若干,依然缺。仔细看看报错,是…/2.0.0..,什么,为什么不是/usr/local下的2.2.2,这才是brew给装的ruby目录啊。which了一下各个命令,发现bundle似乎是旧版的。搜了下,看到stackoverflow下11年的一个问题,知道了对于更新ruby,RVM不错,rbenv可能更好。

然后进rbenv的github页面,了解了一下rbenv支持ruby多版本的机制和用法,觉得这个确实比较清晰,跟系统里自带的切割的比较好,于是用rbenv重新配置运行环境了。

清理现存ruby和gems

首先,查看并删除brew安装的所有gems

gem info —local
gem uninstall —all

会有几个默认的gem不能删除,接下来删除通过brew安装新版ruby:

brew uninstall ruby

然后,对于系统自带的ruby,也先把不用的gem都移掉,但是老版的gem不支持all参数,使用如下脚本:

for i in `gem list --no-versions`; do gem uninstall -aIx $i; done

使用rbenv安装新版ruby和gems

通过brew安装rbenv、ruby-build,并且初始化。

brew install rbenv ruby-build
rbenv init
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

查看并安装新版ruby,也是2.2.2的。这里rbenv install命令是ruby-build包里的。

rbenv install -l
rbenv install 2.2.2

选择使用ruby 2.2.2,全局就可以。

rbenv versions
* system (set by /Users/7Days/.rbenv/version)
  2.2.2
rbenv global 2.2.2
rbenv versions
  system (set by /Users/7Days/.rbenv/version)
* 2.2.2

来,接下来依次安装bundle和jekyll依赖的组件,#bash是新开终端窗口,用于确认使用的命令已更新。

#bash
which ruby
which gem
gem install bundle
#bash
which bundle
bundle install
#bash
which jekyll

这样,jekyll又可以愉快的跑起来了。

gem源

又是个翻墙更新的问题,还是切换到国内源省心。之前用淘宝的,现在切换到Ruby China了。

# 更新gem到新版,建议2.6.x以上
$ gem update --system

# 官方源切换到 Ruby China
$ gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/
$ gem sources -l
https://gems.ruby-china.org

# 如果以前用了淘宝的,建议删除,只保留一个合用的源
$ gem sources --remove http://ruby.taobao.org/

参考文章