安装Octopress步骤
git config --global user.name "name"
git config --global user.email "emailaddress"
cd ~
mkdir git
cd git
git clone [email protected]:name/name.github.io.git
cd ~/git
git clone git://github.com/imathis/octopress.git octopress
cd octopress
#修改Gemfile中源地址为ruby.taobao.org
bundle install
rake install
rake setup_github_pages
#输入github.io.git地址
rake generate
rake preview #在http://localhost:4000
cd source/_deploy
git pull origin master #先同步一次,否则deploy可能报错
cd ..
rake deploy #该命令首先清空_deploy目录,然后将public目录整个拷贝过来,然后commit到github。_deploy 目录对应着master分支。
#备份source到github
git add .
git commit -m 'your message'
git push origin source #source 目录下保存了所有的markdown源文件,是博客的原始数据,以及一些模板文件。因此很有必要备份。用上述命令提交到github,这样就用git管理起来了,再也不用担心数据丢失了。
1.Ruby等依赖安装
Ruby 需要1.9.3版本的,同时由于Jekyll和octopress都是ruby写的,会有诸多ruby依赖,建议切换ruby源为国内源。对于git版本没有太大要求。
查看ruby版本
ruby --version
如果版本符合要求则进入下一步,否则请参照官方手册安装ruby或者使用RVM来安装。
- 安装bundler
bundle可以自动解决依赖,安装方法如下:
gem install bundler
建议国内用户切换gem源为国内源,方法如下:
gem source -r https://rubygems.org/ #删除官方源
gem source -a http://ruby.taobao.org/ #添加淘宝源
gem source -l #查看当前源
- 安装git
如果已经安装git,执行命令返回值为具体版本,否则请自行安装git
git --version
#git version 1.9.1
2.clone网站repo
先设置git
git config --global user.name "name"
git config --global user.email "emailaddress"
然后生成ssh key
$ ssh-keygen -t rsa -C "emailaddress"
按3个回车,密码为空。
复制~/.ssh/id_rsa.pub的内容,添加到github账户中
然后clone网站repo
cd ~
mkdir git
cd git
git clone [email protected]:name/name.github.io.git
3.octopress安装
octopress的安装也比较简单,下载源码后会有Gemfile文件来指示所有依赖,使用bundle即可。
- 下载源码
cd ~
cd git
git clone git://github.com/imathis/octopress.git octopress
cd octopress
- 安装octopress
使用bundle自动安装,先修改Gemfile中的源地址
source "http://ruby.taobao.org"
然后执行命令bundle install
就会自动安装所有octopress及其所有依赖。
注意: 如果上面的命令执行失败,提示下面的错误:
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.
/usr/bin/ruby1.9.1 extconf.rb
/usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in 'require': cannot load such file -- mkmf (LoadError)
请执行下面的命令安装ruby1.9.1-dev
sudo apt-get install ruby1.9.1-dev
- 安装octopress默认主题
rake install
在octopress根目录下的Rakefile定义了如何将octopress跟Jekyll连接起来,rake打包了一些常见的如发布博客主题、生成博客数据、发布博客等一系列命令来简化博主的操作。直接使用Jekyll每一个任务都需要不少命令和文件编辑。
- tips:保持Jekyll最新
由于Jekyll更新比较频繁,为了确保你在本地调试的时候看到的网站效果跟GitHub Pages上的一致,务必时常更新Jekyll,推荐使用bundle更新,命令如下:
bundle update
4.部署到github
github pages支持托管,地址为https://pages.github.com/, 在这个页面你只需要大概了解一下什么是github page,如何申请就行了。
新建一个仓库,这里以your_user_name.github.io为例(当然也可以是project,这个方法有点不一样)。
在octopress根目录执行
rake setup_github_pages
按照要求输入仓库地址等,这个命令会在跟目录下新建_deploy目录,这个会push到仓库的master分支,也就是访问博客的文件。
生成博客, rake generate 这个会按照既定规则生成静态文件的博客。
发布博客,rake deploy 将前一步生成的文件拷贝到_deploy目录并push到github
- 注意:第一次执行 rake deploy 的时候会报错如下:
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'https://github.com/yeesterbunny/yeesterbunny.github.com.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
解决方法是手动进入_deploy目录手动强制push一次。
cd octopress/_deploy
git pull origin master
cd ..
rake deploy
这样再次执行就不会报错了。
博客本地预览
如果在部署到仓库之前,需要先预览一下博客,可以在终端输入rake preview
命令,然后就能在浏览器中进行本地预览访问了:127.0.0.1:4000或localhost:4000,效果跟仓库中的一样。提交源码用于备份
前面提到的deploy只是部署博客代码到github上面,整个octopress并没有提交,为了保证在任何地方随时发布博客,而无需再次详细配置以保证跟github上的最新代码一致,可以将当前octopress的源码存放到github的source分支下:
git add .
git commit -m 'Initial source commit'
git push origin source
5.安装主题
cd ~/git
git clone git://github.com/bkutil/bootstrap-theme.git bootstrap-theme
rake install['bootstrap']
#rake install[bootstrap]/noglob rake install['bootstrap'] ,using zsh
rake generate
rake preview
6.新建博文
新建博文也非常简单,octopress已经预定义了脚本rake new_post[“title”]
方便我们操作,因为Jekyll有一套固定的文档路径以及命名规范,需要按照它的规定来实现才能成功生成博文。博文必须存储在source/_posts目录下,并且需要按照Jekyll的命名规范对文章进行命名:YYYY-MM-DD-post-title.markdown。文章的名字会被当做url的一部分,而其中的日期用于对博文的区分和排序。
new_post执行后会自动新建博文,并在相应的markdown文件中写入yaml元数据。
---
layout: post
title: "title"
date: 2013-08-03 16:36
comments: true
categories:
---
这里的categories是自定义的分类名,支持的定义方式如下:
# One category
categories: Sass
# Multiple categories example 1
categories: [CSS3, Sass, Media Queries]
# Multiple categories example 2
categories:
- CSS3
- Sass
- Media Queries
除此之外,还支持author: Your Name
来指明作者,支持 published: false
表明当前博文是草稿暂时不发布。
- 发布博文完整流程:
rake new_post["New Post"]
#edit the file source/_posts/{DATETIME}-New-Post.markdown
rake generate
git add .
git commit -am "Some comment here."
git push origin source
rake deploy
- 新建页面
你可以在博客源目录下任意地方添加页面,Jekyll会自动拼接,对应的url地址也会根据页面路径自动生成 ,如果要添加about.markdown ,那么就会生成 site.com/about.html ,如果你想要的url地址是 site.com/about/ ,你需要新建的页面应该是 about/index.markdown .同样的,octopress也有脚本完成这个操作。
rake new_page[super-awesome] # creates /source/super-awesome/index.markdown
rake new_page[super-awesome/page.html] # creates /source/super-awesome/page.html
像发布博文一样,默认后缀依然是markdown,但是你可以再Rakefile中修改这个默认配置;一个干净的页面文件如下:
---
layout: page
title: "Super Awesome"
date: 2011-07-03 5:59
comments: true
sharing: true
footer: true
---
这里的title来自于文件名。你也可以手动修改。跟博文的一样,除了不包含分类 categories,对于 sharing 和 comments 你可以关闭,对于 footer 你可以删除,这样就不会添加默认的footer信息到该页面;如果你不像要再页面中显示日期,可以删除这里的 date。
- 内容
页面和博文会调用markup 引擎渲染,默认引擎是再配置文件中;此外,你可以使用任何Jekyll docs中所介绍的模板特性。
默认首页是显示全文,要想仅仅显示摘要,请在合适的地方插入下面的代码
这个会生成一个Continue →
链接来指向完整博文,这个跟wordpress的一样。
7.用alfred命令创建新的Octopress post
在alfred的workflows里点+号,添加Templates-essentials-keyword to script,language选zsh,escaping里不要勾选space,在脚本里输入内容:
#!/bin/bash
#Path for your octopress installation
octopath=/Users/sia/git/octopress
#Editor to open the post in. (Exact name of the .app bundle in your Applications folder)
editorapp=MacDown
if [[ -s "$HOME/.rvm/scripts/rvm" ]] ; then
source "$HOME/.rvm/scripts/rvm"
fi
cd $octopath
rvm use 1.9.3@octopress
octopost=$(noglob rake new_post["{query}"]| grep -o 'source/_posts/.*')
open -a "$editorapp" $octopath/$octopost
这里打开方式用了MacDown,由于zsh不支持中括号,rake new_post
命令需要用noglob rake new_post
。
编辑完成markdown内容后,发布:
rake generate
git add .
git commit -am "Some comment here."
git push origin source
rake deploy
8.Octopress的一些常见问题
- 不能在ZSH中输入命令的问题
Octopress提供了许多Rake任务,可以方便地完成一些操作。常用的命令是rake new_post[“title”]
。但是在ZSH下,输入这样的命令,会提示错误:
zsh: no matches found: new_post[...]
原因是诸如"["、"]"之类的不是正确的命令字符。当然,我们也可以使用转义符来解决这一问题。但每次都需要敲入转义符,实在是太麻烦了。解决方案是在~/.zshrc文件下,加入这样一行内容:
alias rake="noglob rake"
- 解决中文乱码问题
Octopress要创建一篇博客,可以直接运行rake new_post[“title”]
,它会在source/_post下创建一个markdown文件。同时,它会将你输入的title作为blog的链接URL。我们可以通过一些工具,例如EMacs或者MouApp(在Mac OS下)打开该文件进行编辑。但是,当我将markdown文件打开,修改title为中文,且输入中文博客时,再运行rake generate生成博客页面时,会报告编码错误。
gems/ruby-1.9.2-p290/gems/jekyll-0.11.0/lib/jekyll/convertible.rb:32:in 'read_yaml': invalid byte sequence in US-ASCII (ArgumentError)
这是因为jekyll代码没有很好地支持多种编码的缘故。解决办法是找到提示信息中的convertible.rb文件,将第29行的如下代码:
self.content = File.read(File.join(base, name))
修改为:
self.content = File.read(File.join(base, name), :encoding => "utf-8")
如果遇到ruby环境的问题,可以修改ruby环境下的setup_environment.bat文件,在文件最后加入2行:
set LC_ALL=en_US.UTF-8
set LANG=en_US.UTF-8
- 中文博客名称的问题
前面已经提到,rake new_post[“”]
命令会将双引号引起来的标题作为blog链接的一部分。这就必然导致一个问题,就是我们无法在new_post[“”]
命令中直接使用中文作为博客的标题。带来的问题是,我们每次都需要在创建了博客之后,再打开markdown文件,去修改文件前方的title内容为中文。这无疑增加了工作量。解决的办法很简单,因为new_post就是一个rake任务而已,我们可以参照该任务,创建一个自己的任务,添加一个新的参数alias,将它作为我们需要的中文标题。
打开在octopress根目录下的Rakefile文件,在文件末尾增加如下代码
desc "Begin a new post in #{source_dir}/#{posts_dir} with Alias"
task :post, :title, :title_alias do |t, args|
raise "### You haven't set anything up yet. First run rake install to set up an Octopress theme." unless File.directory?(source_dir)
mkdir_p "#{source_dir}/#{posts_dir}"
args.with_defaults(:title => 'new-post')
title = args.title
title_alias = args.title_alias
filename = "#{source_dir}/#{posts_dir}/#{Time.now.strftime('%Y-%m-%d')}-#{title.to_url}.#{new_post_ext}"
if File.exist?(filename)
abort("rake aborted!") if ask("#{filename} already exists. Do you want to overwrite?", ['y', 'n']) == 'n'
end
puts "Creating new post: #{filename}"
open(filename, 'w') do |post|
post.puts "---"
post.puts "layout: post"
post.puts "title: \"#{title_alias}\""
post.puts "date: #{Time.now.strftime('%Y-%m-%d %H:%M')}"
post.puts "comments: true"
post.puts "categories: "
post.puts "---"
end
end
新的post任务接收两个参数,第一个参数与之前的new_post任务需要的参数完全相同,第二个参数alias就可以设置到markdown文件的title:中。例如我们要建立一个博客,标题为“如何建立Octopress博客”,则可以输入命令:
rake post["How to create octopress blog","如何建立Octopress博客"]
注意,除了第二个参数引号内的内容可以用中文外,其他字符包括双引号、逗号和中括号都应该是Utf-8字符。此外,Title和Alias之间用“,”隔开,“,”后不能加空格。
- 图片问题
加入图片在Octopress中,支持的Markdown语法为:
{% img [position] [url] [width] [height] %}
position可以设置为left,right或center。url可以是网上的图片url。如果是自己博客的图片,通常建议放在source/images目录下。为了将来更好地维护,建议按照年和月建立两层目录,如2012/12。因为rake generate
命令会自动生成博客,放在source/images目录下的图片也会被复制过去。因而在markdown的img语法中,图片的url应该是/images/2012/12/picture.jpg。
- 代码问题
Octopress支持的代码高亮有很多。我个人还是比较喜欢直接用codeblock标签。虽然每次敲入这个codeblock不太方便,但它胜在灵活见解。例如,粘贴的代码为ruby语言,就可以在代码片段前后分别加上:
{% codeblock lang:ruby %}
# Here is ruby source code
{% endcodeblock %}
- 摘要问题
如果希望在首页只显示一部分内容,例如摘要,也非常简单。只需要在你希望首页显示的内容最后,输入:
9.octopress配置
实际上octopress已经很好的隐藏了Jekyll的诸多配置,我们只需要简单操作几个文件。octopress就会自动生成相应的Jekyll配置。这里我们仅仅讲解一下_config.yml文件的部分配置项,具体请看官网Configuring Octopress。
该文件的配置分为三大部分:Main config、Jekyll&Plugin、3rd Party Settings。
Main config
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.
注释说明已经很详细了,有一点需要强调的是,如果你想启用自己的域名来访问,这里的url务必修改为你自己的域名,否则即便你添加了CNAME文件,使用rake部署的时候也不会部署该CNAME文件。
建议:
最好把里面的twitter相关的信息全部删掉,否则由于GFW的原因,将会造成页面load很慢。涉及到的文件比较多,小心删除,如果以发表博客,_deploy目录下无需手动删除,重新生成博客后会自动删除。
同理,修改定制文件/source/_includes/custom/head.html 把google的自定义字体去掉。
- 添加about me边栏
编辑 source_includes\custom\asides\about.html,内容如下:
About Me
一句话自我介绍.
新浪微博: @soulmachine
Twitter: @soulmachine
Other: Github, Google+, LinkedIn, Quora
在 _config.yml 的 default_asides 里添加 custom/asides/about.html。
- 添加about页面
rake new_page[about]
会生成 source/about/index.markdown 文件。
编辑该文件的内容。
然后在头部导航菜单中添加页面的超链接。具体做法是编辑 /source/_includes/custom/navigation.html 文件。
- 社会化分享
使用addthis.com的分享按钮,在网站上获取代码,粘贴到source/_includes/post/sharing.html 中,例如我的代码如下: