使用Jekyll在Github上搭建个人博客(环境搭建)

1761 查看

个人博客原文传送门

之前曾经使用nodejs写了一个博客系统,但是偷偷用的公司服务器。无奈被发现了,o(╯□╰)o,被勒令下线了之后只能想其他方法写博客了。原本是想换个地方搭建,于是找百度的同学要了个BAE的nodejs权限,但是抢不到配额,呵呵呵...于是乎就想到了Github上使用静态页面搭建博客的方法

##为什么是Jekyll+github?

官网首页 上的描述是: Transform your plain text into static websites and blogs。Jekyll将原始文本根据一定规则转换成静态的网页和博客。但这个转换并不是简单的字符串替换就了事了,而是首先读取各个文件中的内容,根据配置文件中描述的参数在内存中构建一个巨大的对象存储整个博客的信息,然后再将这些信息根据配置文件中定义的输出方式来生成具体的HTML文件。整个项目是由Ruby写的,所以若需要在本地调试则需要安装Ruby。

使用Jekyll搭建博客有几个好处:
1. 不需要使用额外的数据库
2. 支持markdown,liquid,以及原始的html、css
3. 可以定义模板,并在模板上进行代码复用
4. github对其支持,可以直接在github上搭建,可以继承github上的各种好处(版本控制,免费,无流量限制)
5. 有很多扩展插件(但是在github上用不了,github不允许用户使用扩展插件,大概是出于安全性考虑)

当然缺点也有很多:
1. 生成的是静态网页,无法动态加载,若需要外部服务如评论,只能使用类似于disquz,多说这样的外部插件了
2. 仅仅适合小型网站,不适合大中型网站
3. 没有数据库及服务端的逻辑

由此可见,用来搭建个人博客相当合适(github版本控制,免费,无流量限制,支持markdown,无需关心服务器端逻辑和数据库)

##本地安装Jekyll

首先安装Ruby及gem

  1. RubyInstaller下载ruby,如果有经验的可以直接从Ruby官网进行下载,前者安装比较无脑,会有一些额外的依赖包进行安装,版本也较低,而Ruby官网的版本则相对较高,但是没有额外的依赖包。下载的时候版本选较高一些的,否则会有bug,我选择的是2.0.0p353(2013-11-22)。安装的时候记得勾选添加环境变量。

  2. 安装devkit,RubyInstaller页面中往下拉就能看到。选择自己版本的Ruby对应的devkit,下载并解压,然后执行:

cd devkit
ruby dk.rb init
ruby dk.rb install

这样就完成ruby环境的安装了

  1. 安装gem,这个也可以去gem的官网进行下载,然后直接安装就行了,安装完成后使用gem -v查看一下是否安装成功。我安装的是2.1.11版本

  2. gem是可以选择源的,默认的源有点慢,可以使用ruby.taobao.org的源,方便快捷
    查看当前源

D:\node\jekyll>gem sources list
*** CURRENT SOURCES ***

https://rubygems.org/

D:\node\jekyll>

添加新源

gem sources -a http://ruby.taobao.org/

删除默认源

gem sources --remove https://rubygems.org/

再次查看的时候保证只有http://ruby.taobao.org/就行了

如果上面出错,去网上找找教程吧,ruby环境的搭建和gem的安装教程还是蛮多的,基本google一下遍地都是。

使用gem安装Jekyll

使用命令gem install jekyll就可以安装jekyll及所有需要的依赖,但不包括插件,安装jekyll的时候需要注意一下安装的版问题,jekyll的最新版本为1.4.3,但是有一个bug,stackoverflow上有人遇到过,我自己在使用的时候也遇到了类似的问题,解决方法是安装1.4.2版本,所以这里的安装命令为:gem install jekyll --version "=1.4.2"。安装完成后使用jekyll -v查看一下是否安装成功了

Jekyll在windows下的字符集问题

这个问题较多人遇到过,主要是在启动jekyll服务器的时候出现,以及一些中文文件名上出现,可以参考网上的解答:
1. windows下本地jekyll博客搭建手记
2. Jekyll 本地调试之若干问题
3. 在Windows下使用jekyll如何避免出现中文字符集错误

在这里,我仅仅是改了git bash的字符集,并没有去改jekyll的源文件,因为self.content = File.read(File.join(base, name))语句已经变了,不敢随便改。中文文件名的问题则通过改为全英文文件命名来避开,category里中文的问题则通过修改Permalinks来避开,这些后面会详细介绍