使用 jeykll 或 octopress 在 GitHub 上架 Blog 的工作原理是怎樣的?


一直在評論裡面說話。剛剛看了一下Github pages上面的介紹,有了點自信,還是出來作為答案說吧。

感覺果然github pages自己還是有一套Jekyll引擎的。哪怕本地不安裝Jekyll的運行環境(例如Ruby等),將對應的目錄結構配置好,推送到Github pages上對應的repository裡面,就可以由Github pages進行編譯和頁面生成。生成完畢後還會給你發一個郵件通知你頁面已經更新。

Github pages的介紹里有如下內容:

We currently use Jekyll 0.11.0 and run it with the equivalent command:

jekyll --pygments --safe

As of December 27, 2009, you can completely opt-out of Jekyll processing by creating a file named .nojekyll in the root of your pages repo and pushing that to GitHub. This should only be necessary if your site uses directories that begin with an underscore, as Jekyll sees these as special dirs and does not copy them to the final destination.

由此看來,Github pages並不僅僅是一個顯示靜態頁面的地方,也兼具使用Jekyll生成頁面的功能。


Jekyll和github是兩碼事,Jekyll本是blog系統,但與wordpress不同,Jekyll是為靜態文件blog而設計的,本地安裝Jekyll後,可以使用jekyll --server開啟一個blog服務,也可以自己配置服務。jekyll的厲害之處也是她的原理是可以把markdown、textile等模板語言直接轉換成html,還能像使用php等語言一樣使用模板、引入模塊,使用插件。markdown extile語言是非常友好和方便的,是很多開發者非常喜愛和常用的靜態模板語言,用於寫博客和記錄信息非常清晰便利。

Github支持Jekyll(同一開發者),在內部已經配置好了Jekyll,允許用戶把Jekyll博客當作一個項目發布到Github,博客的所有文件通過git管理,永遠都不會丟失,只要用戶提交,Github自動會調用Jekyll,為用戶把md和textile轉換成可訪問的html,所以用戶也可以不在本地先轉換格式。另外Github為用戶的博客項目配置獨立服務,使得可以以http://XXX.github.com方式訪問,更可以設置CNAME指定另外的域名,還有很多功能,自己去發掘吧。

可以簡單點理解,Jekyll是一套博客系統,而Github提供博客託管服務


在你理解原理之前,我認為首先要明白他們分別都是什麼,實現什麼功能。

首先說說jeykll , 它是一個靜態博客系統,你也可以把jekyll當作是一個工具,它可以將特定格式,如markdown, 或者texttile語法格式編輯的文本文件直接轉換成html , 當作網頁顯示。大家都知道使用markdown等語法來編輯發布博客是一件很輕鬆愉快的事情,比起直接寫html或者jsp,自然輕鬆許多。 jeykll系統的運行依賴ruby運行時,說明jekyll是使用ruby語言開發的。

jekyll 可以在本地環境下安裝,使用jekyll --server可以在本地啟動一個WebRick的HTTP伺服器,瀏覽器訪問localhost:4000便可以預覽博客。更多關於jekyll系統生成的文件目錄以及每個文件夾里文件的作用,可以查看jeykll的官方文檔。

其次我們再來說說octopress, 看了octopress的官方文檔之後,你會發現他的目錄結構和jekyll大同小異。這充分說明了octopress是基於jekyll開發的一套高定製化的靜態博客系統,你可以把它理解成屬於jekyll的二次開發,類似於android與miui, flyme之間的關係。

Github pages在其中充當的角色,僅僅是提供了一個jekyll的運行環境,還有項目託管,讓用戶不僅僅能夠使用jeykll來搭建一個靜態博客,而且還能夠使用Git的方式來更新和管理博客。

最後說說使用octopress在github上搭建博客的基本原理:

關於一些如何安裝jekyll,octopress,以及和github項目庫的連接這些準備工作我就不啰嗦了,直接看下文。

新建一篇文章

命令行 執行

rake new_title["我的第一篇博客"]

這時候會在source/_post目錄下自動生成一個[時間][Title].markdown文件(文件名以及後綴可以自己設定)

使用octopress可以用多項設置,你可以設置博客的Header, Footer, 已經每篇文章顯示樣式,字體大小。octopress默認還為用戶添加了博客評論,收藏,分享到facebook, google plus , tw等,這也可以通過修改gemfile中的配置信息進行功能添加或者刪除。我們還可以自己添加多個模塊,例如中國的一些分享,評論插件。還可以自己定義獨立頁面。

編輯完成後,使用

rake generate

命令,octopress便會將.markdown文件自動轉換成html文件,生成的文件會保存在sass目錄下。當用戶訪問我們的網頁時,便會載入各種css樣式以及模板文件和配置信息。

然後你可以使用

rake preview

命令在本地啟動一個WebRick伺服器預覽你的博客,ctrl+c可以關閉伺服器。

最後使用

rake deploy

命令將本地生成的博客push到github上的遠程庫里。注意,在使用rake deploy命令後,octopress會首先將generate好的博客文件(包括html,css,js,img等)全部放到_deploy目錄下。

一般配置好octopress與你github上的repository後,其會自動為你新建一個分支,默認叫做source分支,主分支叫做master。master分支的內容不需要我們手動去pull和push,這些動作octopress會幫助我們完成。我們所有的修改全部是在source分支下完成的。

在你使用rake deploy命令後,octopress不僅會在本地構建博客目錄到_deploy文件夾下,而且同時會將項目push到github的master遠程分支上。這個時候你的博客就更新完成,可以正常訪問了,然後你為了以後工作同步的需要,將你在source分支的修改也push到github上。

命令

git add .

git commit -m "first post blog"

git push origin source

注意這裡我們push的是source分支,而不是master分支,你可以使用git branch 查看自己當前所處的分支。

這個時候你的工作就完成了。


我的博客,就是掛接在上面,可以參考教程

pelican搭建屬於自已的博客


  1. Jekyll -- 可以把 Markdown 文件生成 HTML 文件的
  2. octopress -- Jekyll + 各種便捷命令

  3. Github Page -- 支持部署靜態頁面的平台
  4. Jekyll + octopress + Github Page = 可以用 Markdown 編寫,支持發布的系統


就是在電腦本地生成靜態網頁(html),然後上傳到Github,用Github的庫當作網站的伺服器


最近折騰jekyll已經一周,查閱了好多知名博主寫的文章,最後才搞明白了原理,最後是直接推送模板到了github 上,倉庫名稱要以自己想要的一個域名命名:http://XXX.github.io ,然後修改配置就可以做成自己的靜態網站了,對於展示博客寫點資料總結,完全足夠,同時可以參考我博客搜集的資料 https://richardphp.github.io


在本地生成靜態網頁,然後推送到github


推薦閱讀:

女,26歲,做了一年多的自動化測試,最近在糾結要不要轉行,求指點。?
為什麼說Ruby繼承了Lisp?
Ruby除了使用rails開發web應用還能做什麼?
什麼人適合學習 Ruby?
Ruby 和 Python 相比有什麼優勢和缺陷?

TAG:博客 | Ruby | RubyonRails | GitHub | Octopress |