基于 Octopress & Github Pages 搭建博客(二)

經(jīng)過(guò)上一篇乏屯,我們?cè)诒镜卮畛隽?Octopress 雛形让歼,這一篇首先我們要將本地的 Octopress 博客部署到 Github Pages 跨细,然后發(fā)布一篇博文臭猜。部署過(guò)程中分析了原理躺酒,可能會(huì)比較枯燥,但是能讓我們更了解 Octopress蔑歌,所以我依舊堅(jiān)持寫下來(lái)了羹应。

廢話少說(shuō),開(kāi)工~

1.將 Octopress 部署到 Github Pages

Github 大家應(yīng)該都有了解過(guò)次屠,也是我很喜歡的平臺(tái)之一园匹,功能真心強(qiáng)大并且可免費(fèi)使用,這里我們拿來(lái)托管我們的 Octopress 博客劫灶。

1.1 新建 Github repository

注冊(cè) Github 賬號(hào)裸违,新建 Github repository 。項(xiàng)目名稱(Repository name)命名格式為 username.github.io 本昏,username 是你的 Github 用戶名(或 organization name供汛,這里和后面我們先不討論 origanization)。例如我的用戶名是 JonyFang涌穆,所以輸入 JonyFang.github.io 即可怔昨。點(diǎn)擊 Create repository 創(chuàng)建。

PS:創(chuàng)建完后不要添加任何內(nèi)容宿稀,另外自己過(guò)程中產(chǎn)生了兩個(gè)疑問(wèn)

1.為什么用 github.io 而不是 github.com趁舀?

2.為什么是 Repository name 一定要按照 username.github.io 填寫?

第一個(gè)問(wèn)題祝沸,這里解釋了為什么把 github.com 改為了 github.io 矮烹,簡(jiǎn)而言之是為了安全越庇。

第二個(gè)問(wèn)題,和 Github 內(nèi)部的結(jié)構(gòu)有關(guān)奉狈,其次后面會(huì)通過(guò) URL 獲取填寫的 username.github.io 作為博客域名卤唉。這樣填寫格式與 Github 內(nèi)部結(jié)構(gòu)的聯(lián)系具體還需要再研究下。若有大神圍觀嘹吨,望指教下:)

1.2. 配置 Github Pages

終端執(zhí)行如下命令:

$ cd octopress

$ rake setup_github_pages

該命令會(huì)要求我們輸入 Github 倉(cāng)庫(kù)的 URL 搬味。復(fù)制粘貼下我們新建倉(cāng)庫(kù)的 SSHHTTPS URL 即可。(例如:git@github.com:username/username.github.io.git

那么這里 rake setup_github_pages 做了什么呢蟀拷?

用戶(users)的 Github Pages 使用 master 分支作為 Web 服務(wù)(web server)的公開(kāi)目錄碰纬,為我們的 Pages url (http://username.github.io)提供內(nèi)容文件。因此问芬,我們會(huì)有這樣的需求悦析,source 分支用來(lái)做與博客源碼相關(guān)的事(存放全部博客源碼),master 分支上 commit 生成的博客內(nèi)容供 Web 訪問(wèn)此衅。而 Octopress 幫我們把這件事給搞定了强戴,通過(guò)這行 code(好 NB~)。

下面具體分析下 Octopress 是怎么做的(可通過(guò)查看 Rakefile 得知):

1. 命令要求我們輸入 Github Pages 倉(cāng)庫(kù)的 URL挡鞍,也就是我們新建的名為 username.github.io 倉(cāng)庫(kù)的 URL骑歹。這樣命名是為了通過(guò)字符串截取 URL 拿到子串(http://username.github.io)作為我們博客的域名;

# Rakefile 中可查看 URL 截取方式:

repo_url = get_stdin("Repository url: ")


2. 將指向(pointing to)imathis/octopress 遠(yuǎn)程庫(kù)的名字 ‘origin’ 改為 ‘octopress’墨微;

Git clone 一個(gè)倉(cāng)庫(kù)時(shí)道媚,會(huì)將 clone 下來(lái)的倉(cāng)庫(kù)命名為 origin,沒(méi)有限定 clone 條件的情況下翘县,會(huì)下載倉(cāng)庫(kù)中所有數(shù)據(jù)最域,并建立一個(gè)指向該倉(cāng)庫(kù) master 分支的指針,本地命名為 origin/master锈麸。

當(dāng)我們 clone 了 octopress 倉(cāng)庫(kù)镀脂,執(zhí)行如下命令可看到遠(yuǎn)程倉(cāng)庫(kù)信息:

$ cd octopress

$ git remote -v

# 輸出如下,可看到遠(yuǎn)程倉(cāng)庫(kù)名為 origin

origin git://github.com/imathis/octopress.git (fetch)

origin git://github.com/imathis/octopress.git (push)

Octopress 文件夾下 Rakefile 中可看出是通過(guò)如下的方式忘伞,將 origin 改為 octopress:

# 查看 Rakefile

system "git remote rename origin octopress"

這里內(nèi)部執(zhí)行了命令 git remore rename origin octopress薄翅,當(dāng) rake setup_github_pages 執(zhí)行完畢,再 git remote -v 發(fā)現(xiàn)遠(yuǎn)程庫(kù)名改為了 octopress氓奈。

$ git remote -v

# 輸出如下

octopress git://github.com/imathis/octopress.git (fetch)

octopress git://github.com/imathis/octopress.git (push)


3. 添加你的 Github Pages 倉(cāng)庫(kù)作為默認(rèn)的 origin remote匿刮,并將遠(yuǎn)程庫(kù)中指向 imathis/octopress 中 master 分支的指針指向現(xiàn)在的 origin(即 username/username.github.io)的 master 分支,

# 查看 Rakefile

system "git remote add origin #{repo_url}"

system "git config branch.master.remote origin"

當(dāng) rake setup_github_pages 執(zhí)行完畢查看遠(yuǎn)程庫(kù)探颈,可以看到遠(yuǎn)程庫(kù) origin 指向了 Github Pages。

$ cd octopress

$ git remote -v

# 輸出信息如下

octopress git://github.com/imathis/octopress.git (fetch)

octopress git://github.com/imathis/octopress.git (push)

origin git@github.com:JonyFang/JonyFang.github.io.git (fetch)

origin git@github.com:JonyFang/JonyFang.github.io.git (push)

到這里训措,應(yīng)該能猜到上一步將指向 imathis/octopress 遠(yuǎn)程庫(kù)的名字 origin 改為 octopress 的原因了伪节。


4. 將本地 master 分支名字從 "master" 改為 "source"

# 查看 Rakefile

system "git branch -m master source"

執(zhí)行如下命令查看本地分支(拿到第6條解釋為什么要改名為 source):

$ git branch

# 輸出如下

* source


5.根據(jù)提供的 Github Pages 倉(cāng)庫(kù)的 SSH 或 HTTPS 的 URL光羞,截取倉(cāng)庫(kù)名 username.github.io?作為博客的 URL(上面 1 有提到)。然后將 octopress 目錄下 _config.yml 文件中 url 參數(shù)值改為 http://username.github.io 怀大。

# octopress 下 Rakefile 查看

url = blog_url(user, project, source_dir)

jekyll_config = IO.read('_config.yml')

jekyll_config.sub!(/^url:.*$/, "url: #{url}")

File.open('_config.yml', 'w') do |f|

f.write jekyll_config


6. 在?octopress 目錄下新建 _deploy?目錄纱兑,并在 _deploy?目錄下新建?master 分支;

前面4 化借,我們將本地 master 分支名字從"master"改為"source"潜慎,這里一起分析下原因。4和6放在一起容易理解點(diǎn)蓖康。

其實(shí)本地 octopress 博客部署到 Github Pages 之后铐炫,遠(yuǎn)程 Github 下會(huì)有兩個(gè)分支, master 和 source蒜焊。遠(yuǎn)程 master 分支作為 Web 服務(wù)公開(kāi)目錄倒信,當(dāng)你訪問(wèn) http://username.github.io 時(shí),提供網(wǎng)站內(nèi)容泳梆;遠(yuǎn)程 source 分支存放的是整個(gè) octopress 框架的源碼鳖悠。

之所以第4步將本地 master 改為 source,是為了把 master 指針讓出來(lái)优妙,讓它指向這一步(6)新建的 _deploy 目錄下的 master 分支乘综。這樣,octopress/_deploy 目錄下的本地 master 分支 就對(duì)應(yīng)了 Github Pages 遠(yuǎn)程庫(kù)中的 master 分支套硼,本地 source 分支同理卡辰。

# 查看 Rakefile?

cd "#{deploy_dir}" do

system "git init"

system 'echo "My Octopress Page is coming soon …" > index.html'

system "git add ."

system "git commit -m \"Octopress init\""

system "git branch -m gh-pages" unless branch == 'master'

system "git remote add origin #{repo_url}"

然后修改了 Rakefile 中 deploy_default 和 deploy_branch 變量的初始值:

# deploy 時(shí)執(zhí)行的命令,"push" 為 Rakefile 中定義的一個(gè) rake task

deploy_default = "push" # 初始為 "rsync"

# deploy 時(shí)執(zhí)行上述 rake task 命令 "push" 到 "master" 分支

deploy_branch? = "master" # 初始為 "gh-pages"


回頭來(lái)看 rake setup_github_pages 熟菲,是不是清晰多了呢看政?

1.3. 生成并部署站點(diǎn)

執(zhí)行如下命令,(將 octopress/_deploy 下數(shù)據(jù) push 到 master 分支):

$ sudo rake generate

$ sudo rake deploy

這時(shí)在瀏覽器輸入 http://username.github.io 就可以訪問(wèn)我們的網(wǎng)頁(yè)啦~

最后別忘了 commit 你的 octopress 框架源碼source 分支:

$ git add .

$ git commit -m'init' ?#init 可隨意填寫

$ git push origin source

好抄罕,到這里允蚣,如果順利完成前面所有內(nèi)容的話,我們已經(jīng)將 Octopress 部署到 Github Pages 了呆贿。如果你想換成自己的域名可以參考這里的方法(Custom Domains)嚷兔,不再贅述了。


這里解釋下做入,rake generate 和 rake deploy冒晰。

rake generate:生成 jekyll 站點(diǎn)(Generating Site with Jekyll)

# 查看 Rakefile

system "compass compile --css-dir #{source_dir}/stylesheets"

system "jekyll build"

rake deploy:將站點(diǎn)部署到 Github Pages。由于 _deploy 目錄所代表的本地倉(cāng)庫(kù)的master分支對(duì)應(yīng) Github Pages 遠(yuǎn)程倉(cāng)庫(kù)的 master 分支竟块,該分支目錄的內(nèi)容即 Github Pages 在互聯(lián)網(wǎng)上供公開(kāi)訪問(wèn)的站點(diǎn)內(nèi)容壶运。因此這里做的主要就是將改動(dòng)的內(nèi)容(博客、DIY 布局等...) copy 到 _deploy 目錄下浪秘,然后將此修改push到 Github Pages 遠(yuǎn)程庫(kù)的 master 分支蒋情。

1. 查看是否有 preview-mode (預(yù)覽模式)埠况,有則刪除,重新執(zhí)行 rake generate

1. 將 octopress/source 目錄下的文件拷貝到 octopress/public 目錄下棵癣;

2. 進(jìn)入 octopress/_deploy 目錄辕翰,執(zhí)行 git pull 操作;

3. 將 octopress/public 目錄的內(nèi)容拷貝到 octopress/_deploy 目錄下狈谊;

4. 將 octopress/_deploy 目錄所對(duì)應(yīng)的本地 master 分支的修改 push 到 Github Pages 遠(yuǎn)程庫(kù)的 master 分支喜命。

5. 下面可以看到 master 分支 commit 信息格式是 "Site updated at 2015-10-14 12:52:36 UTC"

# 查看 Rakefile

system "git add -A"

message = "Site updated at #{Time.now.utc}"

system "git commit -m \"#{message}\""

# 前面說(shuō)過(guò) deploy_branch? = "master"

Bundler.with_clean_env { system "git push origin #{deploy_branch}" }

2. 發(fā)布博文過(guò)程

2.1. 新建一篇博文

打開(kāi)終端河劝,輸入:

$ cd octopress

$ rake new_post["Hi, octopress"]? #"Hi, octopress" 是文章的標(biāo)題

然后在 octopress/source/_posts 目錄下我們會(huì)看到命名格式為 "2015-10-14-Hi-octopress.markdown" 的文件壁榕。

# 查看 Rakefile ,這是實(shí)現(xiàn)方法

filename = "#{source_dir}/#{posts_dir}/#{Time.now.strftime('%Y-%m-%d')}-#{title.to_url}.#{new_post_ext}"

打開(kāi)新建的 "2015-10-14-Hi-octopress.markdown" 文件(我用的 Mou丧裁,免費(fèi)還好用)护桦,會(huì)發(fā)現(xiàn)頭文件有如下內(nèi)容(不要?jiǎng)h除這段信息):

---

layout: post ? ? ? ? ? ? #代表是一片博文

title: "hello world"?

date: 2015-10-14 19:59:22 +0800

comments: true ? ? ? ? #是否允許評(píng)論

categories: ? ? ? ? ? ? #分類

---

頭部布局實(shí)現(xiàn)原理:

# 查看 Rakefile,頭部布局實(shí)現(xiàn)

open(filename, 'w') do |post|

post.puts "---"

post.puts "layout: post"

post.puts "title: \"#{title.gsub(/&/,'&')}\""

post.puts "date: #{Time.now.strftime('%Y-%m-%d %H:%M:%S %z')}"

post.puts "comments: true"

post.puts "categories: "

post.puts "---"

在最后面的---下面就可以開(kāi)始我們的正文啦~

2.2. 預(yù)覽新建的博文

終端執(zhí)行如下命令:

$ cd octopress

$ sudo rake generate

$ rake preview

然后瀏覽器打開(kāi)?http://localhost:4000?,可以預(yù)覽我們剛寫的博客效果煎娇。

2.3. 發(fā)布新建的博文

終端執(zhí)行:

$ sudo rake deploy ?#deploy blog 到 Github Pages

最后別忘了二庵,push 下本地的 octopress 到 source:

$ git add .

$ git commit -m'post test blog'

$ git push origin source

OK,到此缓呛,本地 octopress 博客部署到 Github Pages 完成了催享,打開(kāi)訪問(wèn)你的個(gè)人博客看看效果吧。額哟绊,因?yàn)檫€沒(méi)有做布局修改因妙,留到下一篇介紹~


部署這一塊,我花了挺長(zhǎng)時(shí)間研究的票髓,算是弄明白了過(guò)程是怎么回事攀涵。回頭再看 Github 上的目錄和本地的目錄洽沟,一下子明朗了不少以故。不知道你是不是也覺(jué)得呢?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末裆操,一起剝皮案震驚了整個(gè)濱河市怒详,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌踪区,老刑警劉巖昆烁,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異缎岗,居然都是意外死亡静尼,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)鼠渺,“玉大人蜗元,你說(shuō)我怎么就攤上這事∠等撸” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵薪鹦,是天一觀的道長(zhǎng)掌敬。 經(jīng)常有香客問(wèn)我绷蹲,道長(zhǎng)术幔,這世上最難降的妖魔是什么徒恋? 我笑而不...
    開(kāi)封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任月帝,我火速辦了婚禮晾剖,結(jié)果婚禮上镶奉,老公的妹妹穿的比我還像新娘是鬼。我一直安慰自己饥追,他們只是感情好端考,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布雅潭。 她就那樣靜靜地躺著,像睡著了一般却特。 火紅的嫁衣襯著肌膚如雪扶供。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天裂明,我揣著相機(jī)與錄音椿浓,去河邊找鬼。 笑死闽晦,一個(gè)胖子當(dāng)著我的面吹牛扳碍,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播仙蛉,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼笋敞,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了捅儒?” 一聲冷哼從身側(cè)響起液样,我...
    開(kāi)封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎巧还,沒(méi)想到半個(gè)月后鞭莽,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡麸祷,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年澎怒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡喷面,死狀恐怖星瘾,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情惧辈,我是刑警寧澤琳状,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站盒齿,受9級(jí)特大地震影響念逞,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜边翁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一翎承、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧符匾,春花似錦叨咖、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至创淡,卻和暖如春痴晦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背琳彩。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工誊酌, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人露乏。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓碧浊,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親瘟仿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子箱锐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容