Github博客--Octopress功能分析
用Octopress搭建技术博客是一个很省事的方案,在完成基本环境的配置外,写新博客只需要几项命令操作:
1. rake new_post['title'] : 创建title名称的新博客
2. rake generate :生成博客列表
3. rake preview :本地预览博客
4. rake deploy :将本地博客部署到remote端
的确很简单。。但是再看看Octopress的本地目录:
---octopress
---.theme
--classic
--other_template
---_deploy
---plugin
---public
---sass
---source
--_includes
--head.html
--header.html
--...
--asides
--custom
--post
--_layouts
--_posts
-- new post1
-- new post2
--archives
--assets
--blogs
--fonts
--images
--javascript
--stylesheets
--CNAME
--404.markdown
--atom.xml
--index.html
--robot.txt
---Rakefile
---_config.yml
好吧,我只是列举了一些比较主要的文件,可以说,Octopress的目录文件又多,深度又深,虽然简单的几个rake命令可以完成博客部署功能,但是。。这些目录究竟是什么意思,rake命令究竟执行了什么操作,希望在这篇博客里能够对Octopress的操作做更多说明:
1.Octopress和Jekyll的区别 Octopress是基于Jekyll开发的,可以认为是后者的高层定制。
2.Octopress本地目录结构 (1) _config.yml :模板语言中模板变量的定义位置
基本配置
url: http://linpingta.github.io
title: 褚桐 博客
subtitle: 谁似临平山上塔,亭亭,迎客西来送客行
author: 褚桐
simple_search: http://google.com/search
description: Python 移动&海外广告
附加配置
# 定义GA信息
# Google Analytics
google_analytics_tracking_id: UA-75323645-1
# 定义Disqus评论信息
# Disqus Comments
disqus_short_name: linpingta
disqus_show_comment_count: true
(2) Rakefile:所有rake命令的定义位置,例如常用的rake generate,实际执行的操作是:
desc "Generate jekyll site"
task :generate do
raise "### You haven't set anything up yet. First run `rake install` to set up an Octopress theme." unless File.directory?(source_dir)
puts "## Generating Site with Jekyll"
system "compass compile --css-dir #{source_dir}/stylesheets"
system "jekyll"
end
并没有仔细研究过其中函数的含义,但是在定义keyword和description的时候,可能需要编辑Rakefile。
(3)目录和文件 .themes:Octopress中定义的主题,默认主题是.themes/classic,其它添加的主题也会放在.themes/xxx中。 对于每个主题,都包含sass和source两个文件夹,前者定义的是样式(style),后者定义的是主题(theme)。
_deploy:Octopress编译生成的文件目录,用于push到Github上。
public:Octopress的本地目录,在执行rake deploy的时候,会被public内容复制到_deploy目录,rake deploy:
## Copying public to _deploy
cp -r public/. _deploy
cd _deploy
...
commit
sass/source:Octopress的默认目录,前者定义的是样式(style),后者定义的是主题(theme)。在执行rake generate的时候,会把source和sass的内容拷贝到public目录中。
(4)source和sass目录内部说明 source/_posts:文章定义位置,在执行rake new_post[‘’]的时候,会在此位置生成文章。 source/_includes:网站html格式定义
source/\_includes/xxx.html
source/\_includes/custom/xxx.html
后者是对前者内容的override,比如navigation.html, _include/navigation.html:
<ul class="subscription" data-subscription="rss">
<li><a href="/atom.xml" rel="subscribe-rss" title="subscribe via RSS">RSS</a></li>
</ul>
<form action="https://www.google.com/search" method="get">
<fieldset role="search">
<input type="hidden" name="q" value="site:yoursite.com" />
<input class="search" type="text" name="q" results="0" placeholder="Search"/>
</fieldset>
</form>
<ul>
<li><a href="/">Blog</a></li>
<li><a href="/archives">Archive</a></li>
_include/custom/navigation.html:
<ul class="main-navigation">
<li><a href="/blog/archives">博客</a></li>
</ul>
希望通过这篇文章能够对Octopress的工作过程更多说明,这样不会被它繁复的目录结构吓到。