jekyll博客搭建之艰辛之路

| 分类 blog  | 标签 经验分享  jekyll  | 浏览  
jekyll

前言

其实每一个程序员都有着一颗Geek的心!

起由

话说,从2016年年初,我就一直有一个想法,就是搭建一个自己的博客,让自己更有归属感。但是奈何 理想太丰满 一开始想的太多,想“完全自己搭建前后端,想…” 结果,一直想了好几个月,也没有开始行动(期间域名也买了好几个,但是奈何备案手续太麻烦,一直没有开始…)

某一天,我在知乎某贴上看到了”一系列的jekyll简洁模板”。当时瞬间就被这些简洁好看的模板给吸引住了,于是开始打算按照网上的大批教程,用jekyll搭建自己的博客。

奈何,当时刚开始接触jekyll,而且用的电脑又是windows,再加上按照各种教程倒腾了几天无果后,暂时就放弃windows上用它了。

直到有一天,我翻出了那台被弃用好几个月的老旧本本,安装了linux(ubuntu) 才终于按照教程成功的搭建了Jekyll博客。

折腾了几天后,算是对其中的缘由有了一定了解了,于是这次都重新试着在windows上弄jekyll。最终,不断披荆斩棘,终于也成功的在windows上运行上了jekyll博客。

本文正是基于以上情况,整理了自己在ubutun上,在windows上安装jekyll的步骤以及一些可能遇到的问题,希望能对他人有所帮助!(最起码自己以后再次倒腾时能根据本文正常搭建)

说明,本文只关注如何在本机运行起来jekyll博客,至于如何用github pages托管jekyll博客,相对简单,就不再赘述了

另外,其实最近hexo也挺好的,只不过不是本文关注的内容

搭建jekyll前需要知道的一些知识

磨刀不误砍柴功,理清楚以下关系后,对搭建jekyll是有好处的,方便自查可能的错误原因

ruby与ruby gem的关系

  • ruby是一种脚本语言
  • ruby的其中一个“程序”叫rubygems,简称 gem(ruby 1.9.2及其以上就已经默认安装了ruby gem的,所以无需再次手动安装)

另外还有一个ruby bunder(rails框架中用来管理项目 的gem的,叫bundle),在windows中搭建jekyll,需要安装完ruby后用gem 安装下bunder

ruby与jekyll的关系

jekyll是基于ruby的,所以搭建jekyll之前必须确保ruby正常安装 注意,必须ruby大于2.0.0

jekyll与python的关系

jekyll3.0之前,有一个语法高亮插件”Pygments”,这玩意是基于python的,所以才会有各种教程里面都说搭建jekyll之前需要python环境

但是,请注意 jekyll3.0以后,语法高亮插件已经默认改成了 “rouge‘ 而它是基于ruby的,也就是说 现在搭建jekyll,我们完全不必要再安装python 这样可以减少很大一部分工作量

为什么ruby要改用source来源

不管是那一篇教程,都会告诉你安装完ruby后需要通过gem命令将官方源改成淘宝源或ruby china源,这是因为默认的官方源在国外,国内几乎是无法访问的(具体原因么…)

所以才会必须改成其否源,否则无法使用,但是,请注意 现在淘宝源已经停止维护了,最新搭建jekyll 都应该要改成 ruby china的源

http://gems.ruby-china.org

如何解决jekyll安装过程中的问题

首先,在确保ruby(2.0.0以上)正常安装,并且切换了ruby china源(或者淘宝源)后,其它遇到的所有问题几乎都是 确实某些ruby程序的问题,所以只需要根据提示 通过相应命令,比如 gem install ... 即可解决

windows下还得确保DEVELOPMENT KIT正常安装,并且正确配置

搭建jekyll的基本步骤

不论是windows上还是linux上,搭建jekyll基本都满足如下步骤:

  • 安装ruby(2.0.0以上)
  • 切换ruby的source来源
  • 通过gem命令安装jekyll
  • github上fork心仪的jekyll模板,本地jekyll serve运行相应的博客

另外,windows上还多了一步安装DevKit-mingw 的过程

所以基本上来说,流程并不多,一遍完整走下来并费不了多少时间(但是网上教程良莠不齐,再加上官方教程都是英文,对于刚接触jekyll,并且英语基础不太好的人来说,确实很容易被消磨掉激情)

本文中涉及到的安装系统与环境如下:

windows中:

  • win7 64位
  • rubyinstaller-2.0.0-p648-x64.exe
  • DevKit-mingw64-64-4.7.2-20130224-1432-sfx.exe

linux中:

  • ubuntu 14.04(LTS版)
  • ruby2.0.0

windows中搭建jekyll过程

说实话,刚开始在windows上安装jekyll失败之所以放弃,是因为刚接触,对其中的关系不了解,不太会分析原因,再加上各种教程都说windows下会出问题,所以就被莫名的恐惧到了。

但实际上最后再次在windows上搭建时,发现要比linux上简单(至少比ubuntu 14.04上简单),所以不管怎么样,要自己试过了才知道结果…

当然,也许是因为我目前用到的还不多,所以没遇到那些传说中的深坑…

第一步: 下载ruby2.0.0与Development Kit

如果求稳,最好还是推荐下载2.0.0(因为本文并没有实践过其它版本,当然自己愿意捣鼓当然更好了~~)

  • ruby下载 (请根据自己的系统选择相应ruby,里面包括了ruby和DEVELOPMENT KIT的下载)

第二步: 安装ruby2.0.0

下载完安装包后,先安装rubyinstaller, 记得尽量以管理员的权限安装 安装时会有三个选项

  • Install Td/Tk support
  • Add Ruby executable to your PATH
  • Associate .rb and .rbw files width this Ruby installation

如果不明白意义,请全部选上(如果不选手,安装后可能存在ruby不是可行命令等错误)。并且安装完毕后,环境变量也会自动配置

如果安装完后不放心,可以自行去windows中检查环境变量的配置(主要就是Path中有没有对应的值),然后输入ruby -v ,如果正常响应版本号则代表安装正确

另外,本文中为了排除各种因素,ruby和Development Kit都是默认安装在C盘的

第三步: 安装Development Kit

安装完ruby后,接着安装DevKit(请确保管理员权限安装) 点击安装,选择完对应的目标后,点击确认即会自动提取

接下来找到安装的目录,如 C:\devkit 用windows的命令行运行->cmd即可进入命令行环境进入这个目录,如 cd /d C:\devkit,即可立即进入这个目录。

进入目录后输入 ruby dk.rb init 待运行完毕后,该目录中会自动生成一个config.yml文件(如C:\devkit\config.yml)

接下来,编辑这个文件,修改成以下样子

# This configuration file contains the absolute path locations of all
# installed Rubies to be enhanced to work with the DevKit. This config
# file is generated by the 'ruby dk.rb init' step and may be modified
# before running the 'ruby dk.rb install' step. To include any installed
# Rubies that were not automagically discovered, simply add a line below
# the triple hyphens with the absolute path to the Ruby root directory.
#
# Example:
#
# ---
# - C:/ruby19trunk
# - C:/ruby192dev
#
# ---
- C:\Ruby200-x64

*其中唯一的修改就是在文件末尾加上了 - C:\Ruby200-x64 这段代表加上自己的ruby路径, 实际中可以将C:\Ruby200-x64改为自己的实际ruby目录(层级大概是C:\Ruby200-x64\bin,在bin的上一级)* **

修改完毕后,继续在本目录下键入以下命令即可

ruby dk.rb install

一切顺利后,就代表Development Kit已经正确安装并配置

第四步: 更改默认的source源

鉴于官方源无法访问,所以我们得更换为可以使用的源,这里推荐使用ruby china源,大致步骤如下

  • 先键入命令gem sources -l  查看当前已经添加的源(默认应该是同时有官方源和淘宝源)
  • 然后通过 gem sources -r https://rubygems.org/ gem sources -r https://ruby.taobao.org/ 分别移除官方源和淘宝源 (注意,请对比实际,移除自己已经添加的源即可,可以改为自己上一步中查询出来的地址)
  • 通过 gem sources -a http://gems.ruby-china.org 添加了ruby china的可用源
  • 修改来源后可以通过gem sources -l 查看是否正确修改

rubysource

注意,上述的ruby china源 我采用了http链接,这是因为我在windows中使用https时遇到了ssl问题,并且无法解决,如果你能正确解决,可以换为https链接

第五步: 安装jekyll

安装jekyll前先按照依赖包bundler,下述命令即可安装

gem install bundler

之后,直接可以通过下述命令安装jekyll

gem install jekyll

安装需要一定的时间,过一段时间正常安装后即代表jekyll可以开始使用了

第六步: 运行jekyll博客

首先,你可以去github上fork一个自己喜欢的jekyll模板,如果没有自己喜欢的,可以考虑用我正在改造的模板 mygithub (这个模板参考了3个人的源码,正在打算自己重写前端源码,正在改造中,欢迎star和fork)

然后将对应的项目拷贝到自己本地的目录下,同样用cmd命令进入对应的目录,比如 E:\tools\jekyll\project\dailc.github.io 然后运行 jekyll serve 过一会后如果有以下提示,则代表正常运行

Server address: http://127.0.0.1:4000/
Server running... press ctrl-c to stop.

另外,如果过程中遇到一些其它缺失组件的情况,可以通过相应的gem命令安装

接下来,jekyll已经成功运行了,你可以自己做任意修改了(另外,请注意md文件别用中文命名,否则可能会出错- gbk to utf8的错误,而且保存的文件一定要是UTF-8 无 BOM格式,否则可能无法识别对应的文章)

另外,需要注意,windows下的jekyll是不支持自动监听的…

效果预览

大家也可以看下目前我搭建的jekyll blog (声明,参考了多人源码,正在改造,最终的版本会与现在大不一样)

关于jekyll new myblog可能遇到的问题

上述我之所以直接用已有的jekyll模板运行而不是直接用 jekyll new myblog来完成hello word项目,是因为这样可能会遇到问题

我发现用上述命令搭建hello word项目时,总是提示

Gem::RemoteFetcher::FetchError: SSL_connect returned=1 errno=0 state=SSLv3 read
server certificate B: certificate verify failed

然后,我进到myblog目录下,打开了Gemfile文件,发现原来里面默认用了一个官方源source(如下)… 所以还是推荐大家使用已经搭建好的jekyll模板

source "https://rubygems.org"
ruby RUBY_VERSION

# Hello! This is where you manage which Jekyll version is used to run.
...

linux(ubuntu)中搭建jekyll过程

其实我最先是在linux上搭建成功的,那时候还顺带学了下git命令,总的来说,也是遇到了不少坑。

开始之前,慎重选择linux系统

我一开始安装的linux是ubuntu 13.04,然后一开始就发现这个版本14年1月份就已经停用了,然后开始找各种教程,最后能正常更新时发现,这个版本默认不带ruby2.0.0(当时弄明白后只能继续重装能用的版本了…)

关于ubuntu版本号的选择可以参考下 ubuntu 版本支持(最好使用LTS版本)

第一步: apt-get update并install ruby2.0

开始前先更新下,然后安装 ruby2.0

sudo apt-get update
sudo apt-get install ruby2.0

最好通过su命令进入root权限,另外可以通过 sudo passwd 设置root密码

第二步: 强制更加ruby版本

上一步操作完了后,通过 ruby -v 查看发现显示的是 ruby 1.9.1,这时候请不要慌,其实2.0已经安装完毕了的(14.04的情况下)

在14.04中,如果安装ruby2.0,会默认同时安装1.9.3和2.0.0,而且1.9.3会显示成1.9.1,默认用的是1.9.3,所以才会出现这种情况

这时候,就需要我们强制更改ruby版本了,我们可以通过强制替换/usr/bin/目录下与Ruby相关的符号链接到Ruby 2.0对应的版本,这样即可实现默认版本的切换:(请注意备份,避免意外)

cd /usr/bin/
ln -sf ruby2.0 ruby
ln -sf gem2.0 gem
ln -sf erb2.0 erb
ln -sf irb2.0 irb
ln -sf rake2.0 rake
ln -sf rdoc2.0 rdoc
ln -sf testrb2.0 testrb

替换完成之后先更换官方源,参考windows下更换gem source(在上文)。之后更新下gem

gem update --system
gem pristine --all

这时Ruby的默认版本就已经切换到2.0了。当然虽然这样做比较暴力,但也是可以还原的,如果想切换会Ruby 1.9.3,只需要运行(请注意在Ubuntu 14.04中,Ruby 1.9.3的名称为ruby1.9.1):

cd /usr/bin/
ln -sf ruby1.9.1 ruby
ln -sf gem1.9.1 gem
ln -sf erb1.9.1 erb
ln -sf irb1.9.1 irb
ln -sf rake1.9.1 rake
ln -sf rdoc1.9.1 rdoc
ln -sf testrb1.9.1 testrb

同样的,再更新一下gem之后Ruby就又切换回1.9.3了。

更改完了后,可以通过 ruby -v查看是否版本正确

第三步: 安装jekyll

确保已经切换成了可用源(淘宝源或ruby china源),然后通过下述命令即可安装jekyll

gem install jekyll -V

-V(大写)代表查看详细进度

安装完了后,和上文一样,用自己喜欢的jekyll模板,然后运行jekyll serve即可查看效果

(之后自己可以任意进行修改,以及添加自己想要的功能)

可能的错误以及解决

报错:

rb can't find header files for ruby

解决:

apt-get install ruby2.0-dev(版本必须正确)

报错:

缺少依赖rdiscount,这个是用来解析Markdown标记的解析包。

解决:

gem install rdiscount -V

mac中搭建jekyll过程

mac中比较方便,因为一般mac是自带ruby和gem的

如果没有ruby

brew install ruby

注意,gem安装jekyll需要ruby 1.9.2以上版本,现在官方推荐的是1.9.3

如果版本低于,请升级

gem的换源

虽然自带gems,但在国内,默认的源是被墙住的,因此需要重新设置淘宝源(感谢阿里)

gem sources --remove https://rubygems.org/
gem sources -a http://ruby.taobao.org/
gem sources -l

最后确保只剩一个淘宝源即可

安装jekyll

gem install jekyll

安装完后,即可使用了

jekyll build
jekyll server
...

权限错误问题

如果遇到权限问题,无法安装上,可以使用管理员权限安装

sudo gem install jekyll

ruby版本过低问题

如果提示

requires Ruby version >= 2.1.

那么是由于ruby版本过低造成的,更新ruby

1.先安装rvm

curl -L get.rvm.io | bash -s stable

2.开启rvm

source ~/.bashrc

source atom .bash_profile
(添加:export PATH=/usr/local/bin:$PATH)

source ~/.bash_profile

3.测试是否安装正常

rvm -v

4.安装homebrew

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

5.使用rvm安装新版本的ruby

rvm install 2.2.4
或者
brew install ruby

6.检测版本是否正常

ruby -v

其它报错

如果遇到It looks like you don't have jekyll-paginate

gem install jekyll-paginate

总结

虽然说在windows上和linux上搭建 jekyll时遇到了各种各样问题,但是最终都解决了,在解决的那一瞬间,其实是挺有满足感的(大概这也是我喜欢捣鼓这些东西的愿意之一吧),而且确实感觉自己知识面比起以前还是有所拓展的。

所以不管怎么样,还是得多学!

结束语

你现在所学的知识,会在将来的某个时间段派上用场!

原文地址

原文在我个人博客上面

jekyll博客搭建之艰辛之路

上一篇     下一篇
Lichun Dai

Lichun Dai

程序员,偏前端。会点口琴和吉他。

博客 62 项目 2 随笔 107

GitHub 5sing 知乎 segmentfault 掘金