GeekerProbe

水滴石穿 Keeping faith.      --- wtlucky's Blog

Create Blog Use Octopress and GitHub

| Comments

介绍

现下大概每一个搞技术的人都会有一个技术博客,而GitHub又是广大搞程序的人都知道的一个著名代码托管网站,它的优点众多,其中之一就是GitHub Pages,他是用来给当前的project作介绍说明之用的,鉴于此我们可以将自己blog放置上去,代码交由GitHub托管,每次我们只需要发博文上去就好,对我们来说这是一件多么爽快人心的事啊。Octopress就是这样一款framework,它能部署在Github上,而且很方便使用,当把它配置好之后,几条命令就可以将博文发布上去,正如官网介绍的一样A blogging framework for hackers.,像骇客一样的写博客,这很不错我很喜欢,具体的介绍可以去官网看。

这两者一结合就有了我现在的这个blog了,用它来记录和分享我的学习之路上点点滴滴。网络上有很多介绍安装与配置方法的文章,官网的Documentation写的也很好,推荐E文好的直接去官网。我在安装与配置中也遇到了各种问题,不过在Google的帮助下都一一解决了,你需要懂一些ruby(jekyll),并且会使用git命令,还要使用markdown来书写博文,这会让你觉得是在写代码而不是在写博文。不多说了现在记录下我自己安装与配置过程,供新手与日后自己需要时参考。

我主要参考的文章:

Octopress Documentation

http://ishalou.com/blog/2012/10/15/how-to-use-octopress/

http://mrzhang.me/blog/blog-equals-github-plus-octopress.html

git 简易指南

安装前准备工作

  1. 你需要一个GitHub的账号,注册不说了,已有的跳过。
  2. 你需要在你的机器上安装并配置git官方文档说的很清楚,这要用到terminal,也就是命令行,懒的人可以安装可视化工具GitHub,我建议还是使用命令行,以为之后众多操作都是必须使用命令行来完成的,而且这对于hacker们来说也不是什么难事。
  3. 为GitHub创建SSH Keys,官方文档,这一步很重要,不然之后使用rake deploy命令时会出现如下错误:
rake deploy error
1
2
## Pushing generated _deploy website
Permission denied (publickey).

由于我使用GitHub比较早,这个SSH Key早就生成添加到了GitHub上,但是没有使用默认的名字,始终都是Permission denied。直到在GitHub上的文档中爬了很久才找到解决办法,o(╯□╰)o原来是生成的publickey没有添加到SSH中。 4. 你的机器要有ruby环境,Octopress要求的是ruby-1.9.2,现在ruby最新的版本是ruby-1.9.3。可以使用ruby --version命令来查看。如果没有该命令或者是版本低于1.9.2的话,那么就需要安装与升级ruby。可以使用两种方法rbenvRVM。具体使用方法请自行查看之,我是用的RVM,在安装中遇到的问题就是我是用的是MAC OX MountainLion(10.8.2)系统,xcode的版本是4.6,没有gcc编译器,用得是LLVM,而ruby-1.9.3-p385在LLVM下编译不通过。最终在Google和stackoverflow帮助下解决之。

安装Octopress

terminal下进入Octopress所要安装目录的上一级目录,敲入以下命令:

install Octopress
1
2
3
4
5
git clone git://github.com/imathis/octopress.git geekerprobe      # 从GitHub上clone Octopress到本地 geekerprobe可以随便填,Octopress会被clone到当前目录的geekerprobe目录下
cd geekerprobe    # 进入该目录,如果你是用的是RVM的话,会寻问你是否信任.rvmrc文件 当然是yes
gem install bundler   # 下载bundler,有可能提示gem命令未找到,请自行google解决方法
bundle install    #安装bundle
rake install   #安装Octopress默认主题

到此Octopress在本地已经安装完毕,但是还都是默认配置,而且没有发表博文。但是你可以通过一下命令来生成并预览一下原始的界面:

generate and preview blog
1
2
rake generate    #生成blog,就是根据配置文件,将主题、模板、发表的markdown格式的博文等众多文件生成静态的html文件存放在geekerprobe/public文件夹下
rake preview   #预览生成的blog,此时ruby会启动一个小型的server

接下来打开浏览器访问http://127.0.0.1:4000就可以看到页面啦! 退出预览当然是Ctrl+C了。

Octopress简单配置

此时在terminal下使用‘ls’命令查看目录结构为:

1
2
3
4
CHANGELOG.markdown  Rakefile        plugins
Gemfile             _config.yml     public
Gemfile.lock        config.rb       sass
README.markdown     config.ru       source

\_config.ymlRakefileconfig.ruconfig.rb就是四个配置文件了,我们修改配置主要是在\_config.yml上进行的,其他的三个一般不需要我们去直接管理。\_config.yml的配置分为三个部分:

  1. Main Configs,配置一些博客的基本信息,标题URL什么的;
  2. Jekyll & Plugins,这里是jekyll和一些官方插件的配置;
  3. 3rd Party Settings,这里是第三方插件配置,我们之后自己添加的插件配置信息建议都放在这个部分中。 具体说明请看官方Document注意:每次做完配置文件的修改之后都要使用rake generate来重新生成html来使配置生效,而简单修改页面html则不需要重新生成,在预览状态下直接刷新页面就可以了。

发布博文

博文有两种一种是post一种是page,具体有什么区别请google之。 发送博文只需要在当前目录下:

1
2
rake new_post["My First Blog"]   #发送名为My First Blog的post,会在source/_post目录下按照配置文件生成markdown文件
rake new_page["title"]   #发送page,会生成在source/下,我还没有使用过具体请看官方文档

使用喜欢的编辑器打开source/_post/yyyy-mm-dd-my-first-blog.markdown进行编辑,书写博文。

yyyy-mm-dd-my-first-blog
1
2
3
4
5
6
7
8
9
---
layout: post
title: "My First Blog"
date: 2013-02-23 09:01
comments: true
categories:
---

## Hello octopress! ##

开头两个下划线之间的部分是yaml头,用来告诉Jekyll怎么处理你的posts或者是pages,在这里你可以对你的post或者page做一些设置,比如添加作者,category,是否允许评论等。 在后面就是你自己要写的东西啦,当然是使用markdown来写了,当然它也支持HTMLmarkdown很简单,还不会的看这里,语法说明。 写完保存generate preview就可以了。

部署到GitHub

现在到了最关键的时候了,就是将Octopress部署到GitHub上去。从官方文档了解到,部署到GitHub上有两种一种是使用GitHub Pages,这种在访问时使用的url为http://username.github.com,username为注册的GitHub用户名,你需要在GitHub上建立名字为username.github.comrepository。第二种是使用GitHub Project pages (gh-pages),这种在访问时使用的url为http://username.github.com/reponame,reponame为你在GitHub上建立的repository的名字,这个名字可以随便写,将来生成的静态html会被push到该repo下的gh-pages分支中。 我个人的理解是GitHub建立了这两种方式,第一种是用来介绍你这个GitHub的,所以每个账号只能有一个,而第二个是用来介绍你的project的,而你可以建立多个repo,所以也就可以有多个blog了,虽然url有点复杂,不过Octopress也提供了绑定自己域名的方法,自己目前还没有域名所以使用的是默认的,这一部分自己没有试验过所以就不贴上来了,具体的查看官方文档。鉴于此我使用了第二种方式来将blog部署到GitHub上。 步骤:

  • 先到GitHub上创建名为geekerprobe的repo。
  • 因为使用第二种方法我们要将blog放在username.github.com的子集目录所以我们要在本地将目录也设置为子集目录,不然会出现“Sorry!I can not find /”的错误,如果使用第一种方法则跳过此步骤,因为默认就是没有子集目录的。
1
2
rake set_root_dir[/geekerprobe]   #将路径设置为/geekerprobe
rake set_root_dir[/]   #如果你想恢复到初始目录,则键入此命令

这条命令会修改\_config.ymlRakefileconfig.rb中的有关路径部分的设置,并将实际文件进行剪切移动操作,以适应路径的改变。而且在本地预览时也要使用子集目录来访问预览http://127.0.0.1:4000/geekerprobe

  • 接下来就是将blog部署上去了
1
rake setup_github_pages   #将Octopress部署到GitHub上

会提示你输入一个形如[email protected]:username/geekerprobe.git的地址,那么就按照这种形式输入你自己的repo的地址,这个地址可以在GitHub上你的repo的SSH文本框中得到,粘贴过来就好。 回车确定,等待片刻提示成功就可以了。 这时查看目录会发现多了一个_deploy的文件夹,这个文件夹是一个git库,指向了GitHub上你的repo的gh-pages分支。同时你的repo的gh-pages分支在GitHub上也已被创建了。

  • 接下来生成并push博文到GitHub上
1
2
rake generate   #生成
rake deploy   #push到GitHub上,此时会将/public目录下的文件完全拷贝,粘贴到/_deploy目录下,然后在push

如果你的GitHub的SSH Key没有设置或者设置错误的话,此时会出现权限不允许的错误。看到成功时就说名部署工作已经完成了,恭喜你赶紧到浏览器访问一下你的url试试看吧。

到此基本的工作已经做完了,你的blog已经成功部署到GitHub上了并且可以正常使用了。

使用发布博文

1
2
3
4
rake new_post[]   #创建post,在editer中编辑post
rake generate     #生成静态html
rake preview      #本地预览,修改错误,查看效果
rake deploy       #无误后,push到GitHub上

到此,你可以离开此页了,如果还要看其他设置的话,请看下去,我觉得这还是挺有用的,他将你的posts也同样备份到GitHub上,下次在你换了一个环境或者电脑后,就可以直接clone下来或者pull合并,免去博文与各种配置丢失。

备份Octopress到GitHub

此处使用的都是git命令,对git命令不熟悉的请看

首先/geekerprobe这个目录我们是从Octopress的GitHub上clone下来的,所以他本是就是一个git库,可以通过cat .gitignore查看该目录下被排除在git库外的文件以及目录。 这些我们在clone之前就已经由作者做好了。我们需要做的是:

1
2
3
git remote add origin [email protected]:username/geekerprobe.git   #在远端添加源,origin可以随便写,建议用origin这是默认,后面的路径还是那个
git branch -m site    #创建一个分支site,这个site也可以随便写。官方文档使用的是master主分支
git push origin site   #将这个源push到site分支中

这样你去你的GitHub上就可以看到你的repo又多了一个site分支,并且有了文件也有版本记录。

这里说一下我理解到的git的简单原理,我也是刚刚接触到git之前都是使用subvision的,通过配置这个blog有了一点体会,但是比较浅显,有不对之处欢迎指出。

在一个git库中会有文件记录你所有对库(working dir)中文件的增删改,类似于svn,可以使用

1
git status

来查看当前的所有文件改动。 之后将显示出来的有改动的文件add到缓冲区(index),通常我都是

1
git add .

将所有改动都add到缓冲区,但这只是临时的并没有提交到remote端,也没有被提交到上次提交后的状态下。 然后就是将缓冲区的内容提交到上次提交的状态(HEAD)下

1
git commit -m "something to say"

这些引号中的文字就是类似于svn中的版本改动说明了,现在对文件的改动依然没有提交到remote端。接下来

1
git push origin site   #将HEAD push到remote段

到此本地的版本已经提交到GitHub。

Octopress拓展增强

要想使Octopress拥有更强大的拓展请参考一下文章:

安装主题
自定义样式
添加多说评论
添加标签云与category list

Comments