前言 
首先感谢程哥 的支持,我大致也是看到他的博客才萌生搭Blog的想法,再则希望通过技术博客的书写能理清技术的始末,为每个课题形成一个技术闭环,刚毕业技术积累不是很成熟,大部分时间都是在利用为知笔记、有道笔记的工具来记录工作中所积累的知识,对此我也进行了一些尝试,但最终因为国内的一些博客站点糟糕的排版、设计、代码高亮等等各种原因而放弃了。本着开源分享的心态我想把几年的心得与技术积累已文字的形式展示出来,经过一番Google之后我发现现在的程序猿们都偏向于Octopress 这个开源的框架加上Github Pages 服务来搭建Blog,看上非常的高大上,排版、代码高亮都做得非常棒,本人主要使用Markdown 做博客编辑,主要是Mou 作者不再更新软件了,作者就使用MacDown 进行编辑,其实最近超级火的编辑器Visual Studio Code 安装Markdown插件也是可以预览的
安装Octopress 
这里 是Octopress的官方指南,各位可以按照其中的步骤进行安装,下面的文字只是记录了我个人的安装过程,可以为大家提供一些参考
由于Octopress的使用需要Ruby,于是搭环境就这条路上的第一只拦路虎。Ruby版本繁多并且版本之间向下兼容做的不好,所以基于Ruby所做的框架大多要求特定版本的Ruby才能正常运行
Octopress最低要求的是Ruby1.9.3(最低,已经不需要去强制去下载1.9.3),MacOSX自带的Ruby版本是2.x的,其实用现阶段的Ruby就ok了。Octopress的官方指南推荐使用的是RVM和rbenv,可以根据需要选择使用需要的工具
安装rbenv 
我最近才第一次安装octopress(我的是OSX 10.12.5)的过程中我首先使用了RVM,但碰到了一些莫名的问题无法解决,最后还是使用了rbenv
这里我使用Homebrew 来安装rbenv,如果你没有Homebrew,打开终端,使用以下命令安装吧
1 
$  ruby  - e  "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)" 
 
有了Homebrew就可以安装rbenv了
1 
2 
3 
$  brew  update 
$  brew  install  rbenv 
$  brew  install  ruby - build 
 
用rbenv安装Ruby 
如果想尝试安装与管理其他版本的Ruby,可是使用如下的方式进行管理与切换:
1 
2 
3 
4 
5 
6 
7 
$  rbenv  install  -- list      #  列出所有  ruby  版本 
$  rbenv  install  2.0 . 0 - p247  #  安装需要的 ruby 版本 
$  rbenv  versions            #  所有已安装的 ruby 版本 
$  rbenv  global  1.8 . 7 - p352   #  设置全局 ruby 版本 
$  rbenv  local  1.9 . 7         #  设置当前文件夹 ruby 版本 
$  rbenv  rehash 
$  rbenv  uninstall  2.00      #卸载指定 ruby 版本 
 
安装RVM 
在第二次安装octopress(OSX 10.11时代)的过程中依照之前的经验使用rbenv,但却怎么也安不上需要的ruby版本,最后换回了RVM
安装octopress官方提供的安装方法
1 
$  curl  - L  https : //get.rvm.io | bash -s stable --ruby 
 
用RVM安装Ruby 
同上如果使用rvm安装ruby,我依照之前的经验安装1.9.3-p125的版本,但在编译时出现了一些错误,继而尝试了评论中@lance_lan 提到得1.9.3-p551版本才安装成功
1 
2 
3 
4 
$  rvm  install  ruby - 1.9 . 3 - p551  -- with - gcc = clang 
$  rvm  use  1.9 . 3 - p551 
$  rvm  rubygems  latest 
$  ruby  -- version  # ruby  1.9 . 3 p551  ( 2014 - 11 - 13  revision  48407 ) 
 
安装Octopress 
安装Ruby完成后就按照官方指南安装Octpress
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
# clone  octopress 
$  git  clone  git: //github.com/imathis/octopress.git octopress 
$  cd  octopress 
 # 安装依赖 
$  gem  install  bundler 
$  rbenv  rehash   #  如果你刚才用了rbenv 
$  bundle  install 
 # 安装octopress默认主题 
$  rake  install 
 
部署 
接下来需要把Blog部署到github上去,第一步要做的是去github 创建一个username.github.io的repo,比如我的就叫huakucha.github.io
然后运行以下命令,并依照提示完成github和Octopress的关联,关联的是你工程的全路径
1 
$  rake  setup_github_pages 
 
创建博客 
生成博客 
1 
2 
$  rake  generate 
$  rake  deploy 
 
把生成后的代码上传到github
1 
2 
3 
$  git  add  . 
$  git  commit  - m  ' create  blog ' 
$  git  push  origin  source 
 
完成后等待一段时间后就能访问http://username.github.io看到自己的博客了
修改配置 
配置文件路径为~/octopress/_config.yml,这个文件其实就是octopress的配置文件,里面内置了一些现有的模块,你也可以新增全局的配置属性
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
url:                 #  For  rewriting  urls  for  RSS ,  etc 
title:               #  Used  in  the  header  and  title  tags 
subtitle:            #  A  description  used  in  the  header 
author:              #  Your  name ,  for  RSS ,  Copyright ,  Metadata 
simple_search:       #  Search  engine  for  simple  site  search 
description:         #  A  default  meta  description  for  your  site 
date_format:         #  Format  dates  using  Ruby ' s  date  strftime  syntax 
subscribe_rss:       #  Url  for  your  blog ' s  feed ,  defauts  to  / atom . xml 
subscribe_email:     #  Url  to  subscribe  by  email  ( service  required ) 
category_feeds:      #  Enable  per  category  RSS  feeds  ( defaults  to  false  in  2.1 ) 
email:               #  Email  address  for  the  RSS  feed  if  you  want  it . 
 
编辑完成后
1 
2 
3 
4 
5 
6 
7 
$  rake  generate 
 $  git  add  . 
$  git  commit  - m  "settings" 
$  git  push  origin  source 
 $  rake  deploy 
 
安装第三方主题 
Octopress有许多第三方主题可以选择,首先在这里Github 上寻找喜欢的主题,点击进入对应主题的git,一般在readme上都会有安装流程,我使用的是classic-martinb
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
$  cd  octopress 
$  git  submodule  add  git: //github.com/martinbjeldbak/classic-martinb.git .themes/classic-martinb 
$  rake  install [ ' classic - martinb ' ] 
$  rake  generate 
 $  git  add  . 
$  git  commit  - m  "theme" 
$  git  push  origin  source 
 $  rake  deploy 
 
定制第三方主题 
使用第三方主题也并非是一个“拎包入住”的过程,其中必然会有一些需要定制的地方。定制的过程中会涉及一些web相关的知识,但对于各位来说应该都并非难事。
例如刚安装完greyshade之后我们会发现左边navigation上的About me 是指向作者的个人主页,我们需要把这个文字连接定向到自己的个人主页上。
这个aboutme对应的html为/source/_includes/custom/navigation.html
1 
2 
3 
< li >< a  href = "/" > Blog </ a ></ li > 
< li >< a  href = "http://about.me/shashankmehta" > About </ a ></ li > 
< li >< a  href = "/blog/archives" > Archives </ a ></ li > 
 
把其中的http://about.me/shashankmehta替换成需要的url,替换完之后
1 
2 
3 
4 
5 
6 
7 
$  rake  generate 
 $  git  add  . 
$  git  commit  - m  "theme" 
$  git  push  origin  source 
 $  rake  deploy 
 
支持中文标签 
目前版本的Octopress会在/source/blog/categories下创建一个index.markdown来作为分类的首页,但这个首页在标签有中文时会出现无法跳转的情况,原因是因为在出现中文标签时Octopress会把文件的路径中的中文转换成拼音,而在Category跳转时是直接写了中文路径,结果自然是404。解决方法是自己实现一个分类首页并处理中文。
首先按照这里 的方法实现index.html
将plugins/category_list_tag.rb中的
1 
category_url  =  File . join ( category_dir ,  category . gsub (/ _ | \ P { Word }/,  '-' ). gsub (/-{ 2 ,}/,  '-' ). downcase ) 
 
替换成
1 
category_url  =  File . join ( category_dir ,  category . to_url . downcase ) 
 
这样你的博客就可以支持中文标签的跳转了。
 
写博客 
经过上面几部后,博客已经成功搭建,现在就可以开始写博文了。
创建博文 
1 
2 
3 
4 
5 
6 
7 
# 如果用的是终端 
$  rake  new_post [ ' title ' ] 
 # 如果用的是ZSH 
$  rake  "new_post[title]" 
# 或者 
$  rake  new_post \ [ ' title '\ ] 
 
生成的文件在~/source/_posts目录下
编辑博文 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
# markdown写博文 
 $  rake  preview  # localhost: 4000 
 $  rake  generate 
 $  git  add  . 
$  git  commit  - m  "comment" 
$  git  push  origin  source 
 $  rake  deploy 
 
后记:解决Octopress博客访问慢的问题 
由于国内环境的原因造成了访问博客速度“惊人”,所以对Octopress进行相关改造成了必须的步骤(如果你能接受手机端打开时间超过20秒),好了废话不多讲
清理没用的服务 
修改_config.yml,由于Octopress预设了一些像Disqus评论、Github仓库、Twitter等访问较慢的一些网站,这个相关服务在国内访问相对较慢,这里你只要把这些不需要的服务注释掉就好了
去除Disqus评论 
1 
2 
3 
1  # Disqus  Comments 
2  # disqus_short_name:  androidyue 
3  # disqus_show_comment_count:  true 
 
去掉Github仓库展示 
1 
2 
3 
4 
5 
# Github  repositories 
# github_user:  androidyue 
# github_repo_count:  11 
# github_show_profile_link:  true 
# github_skip_forks:  true 
 
Twitter按钮 
1 
2 
3 
# Twitter 
# twitter_user: 
# twitter_tweet_button:  true 
 
Facebook Like 
1 
2 
# Facebook  Like 
# facebook_like:  true 
 
去除Google+相关 
1 
2 
3 
4 
5 
6 
7 
8 
# Google  + 1 
# google_plus_one:  true 
# google_plus_one_size:  medium 
 # Google  Plus  Profile 
# Hidden:  No  visible  button ,  just  add  author  information  to  search  results 
# googleplus_user: 
# googleplus_hidden:  false 
 
替换快速的请求资源 
其实,真正解决加速的重要环节可能是这里,因为Octopress很多依赖于Google的库和资源
解决Google Analytics巨慢的问题 
这里 给出的方案是自己在七牛上存放ga.js(主要是Google Analytics的相关方法),但是我这边遇到了HTTPS访问HTTP的问题我就直接在自己的工程目录下存放了ga.js,参考如下,修改source/_includes/google_analytics.html
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
$  < script > 
$      ... 
$      _gaq . push ([ '_trackPageview' ]); 
$ 
$      ( function ()  { 
$          var  ga  =  document . createElement ( 'script' ); 
$          ga . type  =  'text/javascript' ; 
$          ga . async  =  true ; 
$          ga . src = 'http://xxxx.com/ga.js' ; //自己工程目录或者CDN 
$      var  s  =  document . getElementsByTagName ( 'script' )[ 0 ];   
$          s . parentNode . insertBefore ( ga ,  s ); 
$      })(); 
$  < /script> 
 
解决fonts.googleapis.comm问题 
问了节省大家时间,我给你们找了一个国内外优秀前端 CDN 加速服务 ,去找一些你们自己认为信得过的CDN服务商(例如:不要选360了因为已经不再维护了)
修改文件/source/_includes/custom/head.html
1 
2 
$  < link  href = "https://fonts.cat.net/css?family=PT+Serif:regular,italic,bold,bolditalic"  rel = "stylesheet"  type = "text/css" > 
$  < link  href = "https://fonts.cat.net/css?family=PT+Sans:regular,italic,bold,bolditalic"  rel = "stylesheet"  type = "text/css" > 
 
解决ajax.googleapis.comm问题 
修改source/_includes/head.html,还是利用上面的CDN替换jquery.min.js
1 
2 
3 
4 
5 
6 
7 
8 
$  < link  rel = "canonical"  href = "" > 
$  < link  href = "/favicon.png"  rel = "icon" > 
$  < link  href = "/stylesheets/screen.css"  media = "screen, projection"  rel = "stylesheet"  type = "text/css" > 
$  < link  href = "/atom.xml"  rel = "alternate"  title = "一骑当千"  type = "application/atom+xml" > 
$  < script  src = "/javascripts/modernizr-2.0.js" >< /script> 
$  < script  src = "https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js" >< /script> 
$  < script >! window . jQuery  &&  document . write ( unescape ( '%3Cscript src="./javascripts/libs/jquery.min.js"%3E%3C/script%3E' )) < /script> 
$  < script  src = "/javascripts/octopress.js"  type = "text/javascript" >< /script> 
 
参考资料