完善本地搭建的jekyll環境(Windows)


序:上篇文章雖然在本地搭建好了jekyll環境,但是卻存在一些問題,如通過jekyll new創建的站點無法正常跑起來、中文編碼有問題。這說明之前搭建的環境有不周之處。

PS:因之前自己搭建環境時並未做過多記錄,現在寫起文章來需要在模擬幾次安裝,所以本文寫的有點慢,畢竟不像當初只是為了安裝,現在是為了弄清楚安裝。立足點不同,需要做的事情也不同,這次需要做許多確認工作。

 

一、語法高亮插件問題

通過jekyll new命令創建的站點中使用了語法高亮插件pygments(該語法插件支持超多語言,估計也是因此jekyll中便使用了吧),但pygments需要單獨另外安裝,所以導致部署站點時出現如下錯誤,雖然網站啟動了,但是並沒有成功生產靜態頁面,導致瀏覽頁面時都是空的。

C:\test>jekyll serve
Configuration file: C:/test/_config.yml
            Source: C:/test
       Destination: C:/test/_site
      Generating... C:/Ruby193/lib/ruby/gems/1.9.1/gems/posix-spawn-0.3.6/lib/po
six/spawn.rb:162: warning: cannot close fd before spawn
  Liquid Exception: No such file or directory - /bin/sh in _posts/2013-09-0
9-welcome-to-jekyll.markdown
done.
[2013-09-09 20:57:52] INFO  WEBrick 1.3.1
[2013-09-09 20:57:52] INFO  ruby 1.9.3 (2013-05-15) [i386-mingw32]
[2013-09-09 20:57:53] INFO  WEBrick::HTTPServer#start: pid=344 port=4000

 

在自動生成的站點的_post下,有一后綴為markdown的文件,其內容中包含如下代碼,即以ruby語法高亮顯示中間的代碼,正是這個代碼引起了上面的錯誤:

{% highlight ruby %}
def print_hi(name)
  puts "Hi, #{name}"
end
print_hi('Tom')
#=> prints 'Hi, Tom' to STDOUT.
{% endhighlight %}

對於上面的錯誤提示信息,我當初看得也是一頭霧水,網上搜了下才發現的,至於錯誤信息具體啥意思,沒有深究,畢竟這是ruby語言的,而我還沒也沒功夫去學~

 

下面開始解決此問題:

安裝Python:好了下面開始解決問題,先去pythonPortablePython下載一個v2.7版本的Python(我下的是PortablePython_2.7.2.1.exe,v3版本似乎不行,網上有一些文章給了個V3版本的下載地址,我試了多次都無法解決此問題,不知道是不是因為這些文章過於久遠導致方法過時了,最后幸得有人提過此問題,才得以解決。),這個似乎是另一門編程語言了啊,這個語法高亮的插件便是利用該語言編寫的,因此要使用該插件就要安裝它了。這里稍微提下python與Portablepython不同吧,后者繼承了許多東東,比如這里如果安裝了它,那么pygments便已經繼承了在里面(我下的這個版本是如此),但后來發現pygments並不是最新版-.-!,雖然仍然可以繼續下面的pygments安裝,但是是否替換了老版本就無法確認了,也許版本之間的差異感覺不出來,但既然有這樣的問題,還是選擇用python好了,不過下面也會提及Portablepython的,因為我最初就是用它的。

如果安裝PortablePython:下載安裝版安裝好后(選擇安裝全部即可~),需要自己配系統環境變量,對此表示無解(配置的路徑為C:\Portable Python 2.7.2.1\App,具體看你的安裝路徑,然后指定到App文件夾即可)。

如果安裝Python:下載安裝好后系統環境變量已經自動配置了。

 

安裝pygments:這里需要借用easy install來安裝pygments(pygments官網介紹的),所謂easy install就是一個工具方便我們在python中安裝類似pygments這類的東東。在pygments官方有介紹安裝的:http://pygments.org/download/,有興趣的可以瞧瞧。

如果是Python:因為要借用easy_install來安裝pygments,所以需要先安裝easy_install,根據http://peak.telecommunity.com/DevCenter/EasyInstall介紹,需要借用setuptools來安裝easy_install,到此處https://pypi.python.org/pypi/setuptools下載最新版的setuptools,不過根據https://pypi.python.org/pypi/setuptools/1.1.6里面的說明,在Windows下建議的安裝方式是直接下載安裝腳本,該腳本會聯網下載setuptools並進行安裝(其實下載下來的setuptools里面就包含了該安裝腳本-_-,如果把下載下來的安裝腳本和setuptools放在一塊,腳本會直接讀取本地已有的setuptools進行安裝。)。

下載安裝腳本后,通過cmd執行python ez_setup.py命令即可,之后會刷屏哦,刷完基本就好了,當然前提是你網絡信號要好啊^_^。之后再python目錄下會多出一個Script文件夾,easy_install就在里面,在cmd中切換到Script文件夾,然后執行easy_install Pygments命令來安裝Pygments,該操作也是聯網下載安裝(當然也可以離線,需要到此處下載相應版本的egg文件放於Script目錄下),安裝的日志信息同PortablePython使用easy_install Pygments命令應該是一樣的。

如果是PortablePython:我在安裝PortablePython后,easy install已經附帶在里面的App\Script目錄下(可能有些版本不會附帶進去的,比如V3版本,該文章中便有介紹如何安裝,但是V3版無法解決此處的問題,所以這里就不提及如何安裝easy install了),在配置好系統環境變量后,打開cmd切換到App\Script下,執行如下命令即可,之后便會聯網下載所需的文件進行安裝,如下所示提示信息,注意大小寫!!

C:\Portable Python 2.7.2.1\App\Scripts>easy_install Pygments
Searching for Pygments
Reading http://pypi.python.org/simple/Pygments/
Best match: Pygments 1.6
Downloading https://pypi.python.org/packages/2.7/P/Pygments/Pygments-1.6-py2.7.e
gg#md5=1e1e52b1e434502682aab08938163034
Processing Pygments-1.6-py2.7.egg
creating c:\portable python 2.7.2.1\app\lib\site-packages\Pygments-1.6-py2.7.egg

Extracting Pygments-1.6-py2.7.egg to c:\portable python 2.7.2.1\app\lib\site-pac
kages
Adding Pygments 1.6 to easy-install.pth file
Installing pygmentize-script.py script to C:\Portable Python 2.7.2.1\App\Scripts

Installing pygmentize.exe script to C:\Portable Python 2.7.2.1\App\Scripts
Installing pygmentize.exe.manifest script to C:\Portable Python 2.7.2.1\App\Scri
pts

Installed c:\portable python 2.7.2.1\app\lib\site-packages\pygments-1.6-py2.7.eg
g
Processing dependencies for Pygments
Finished processing dependencies for Pygments

 

在安裝好pygments,我們比如會興奮的開始在自己的站點中執行jekyll serve,但發現問題還存在着(如果你的沒問題,先請看下文,如果還是沒問題,我真好奇了,請賜教~)

最終的問題着實讓我糾結了一陣子,幸好有網友於網上提過次問題,幸得解決,該問題最終歸結到了jekyll這邊,確切的說是ruby這邊,具體是pygments.rb上,瞧這名字估計是ruby調用pygments的一個工具包之類的,通過在cmd執行gem list可以看到pygments.rb的版本:

C:\test>gem list

*** LOCAL GEMS ***

bigdecimal (1.1.0)
classifier (1.3.3)
colorator (0.1)
commander (4.1.5)
directory_watcher (1.4.1)
fast-stemmer (1.0.2)
highline (1.6.19)
io-console (0.3)
jekyll (1.2.1)
json (1.5.5)
liquid (2.5.2)
maruku (0.6.1)
minitest (2.5.1)
posix-spawn (0.3.6)
pygments.rb (0.5.2)
rake (0.9.2.2)
rdoc (3.9.5)
redcarpet (2.3.0)
safe_yaml (0.7.1)
syntax (1.0.0)
yajl-ruby (1.1.0 x86-mingw32)

根據Stack Overflow上此貼的回答,pygments.rb的0.5.1、0.5.2版本有問題,導致無法正常執行(至於具體原因還沒有深究過,不過覺得奇怪,為啥官方不修復呢?),所以需要把版本降至0.5.0才能正常運行,那么先安裝0.5.0版然后卸載高版本就行了,如下命令,主要聯網哦:

C:\>gem install pygments.rb --version "=0.5.0"
Fetching: pygments.rb-0.5.0.gem (100%)
Successfully installed pygments.rb-0.5.0
1 gem installed
Installing ri documentation for pygments.rb-0.5.0...
Installing RDoc documentation for pygments.rb-0.5.0...

C:\>gem uninstall pygments.rb --version "=0.5.2"
Successfully uninstalled pygments.rb-0.5.2

之后執行jekyll serve就沒問題了:

C:\test>jekyll serve
Configuration file: C:/test/_config.yml
            Source: C:/test
       Destination: C:/test/_site
      Generating... done.
  Server running... press ctrl-c to stop.

事后(2013-09-20),在看Ruby193\lib\ruby\gems\1.9.1\gems\jekyll-1.2.1目錄下的相關文件時,發現jekyll.gemspec中包含如下信息:

  s.add_runtime_dependency('liquid', "~> 2.5.2")
  s.add_runtime_dependency('classifier', "~> 1.3")
  s.add_runtime_dependency('directory_watcher', "~> 1.4.1")
  s.add_runtime_dependency('maruku', "~> 0.5")
  s.add_runtime_dependency('pygments.rb', "~> 0.5.0")
  s.add_runtime_dependency('commander', "~> 4.1.3")

上面紅色字樣可見依賴的是0.5.0版本,從而可以推測高版本真的不行吧。

然后我在rubygems網站上的jekyll下載頁也看到了類似信息:

Runtime Dependencies
classifier ~> 1.3
colorator ~> 0.1
commander ~> 4.1.3
directory_watcher ~> 1.4.1
liquid ~> 2.5.2
maruku ~> 0.5
pygments.rb ~> 0.5.0
redcarpet ~> 2.3.0
safe_yaml ~> 0.7.0

 

 二、中文亂碼問題(Add@2013-11-23:新版本已不再是問題,參見Windows下運行jekyll,編碼已不再是問題)

由於這些都是外國進來的玩意,所以由於語言的不同,亂碼也就產生了。一般咱們編寫都是采用utf-8的吧,但是在windows下安裝的jekyll,默認是以GBK編碼的方式去讀取咱們編寫的文件,如此便亂碼了。

要解決此問題,總不至於要寫GBK編碼的文件吧,畢竟這個編碼不怎么通用,所以需要修改jekyll中的代碼,讓其以utf-8編碼來讀取我們的文件,已有網友找到解決方法!需要修改jekyll中讀取的代碼,指定為utf-8編碼即可。具體如下:

//文件:C:\Ruby193\lib\ruby\gems\1.9.1\gems\jekyll-1.2.1\lib\jekyll\convertible.rb
//具體路徑視版本號及安裝路徑有所不同
//找到如下代碼:
self.content = File.read(File.join(base, name))
//修改為:
self.content = File.read(File.join(base, name), :encoding => "utf-8")

之后在文件中寫入中文時,記得保存為utf-8的編碼,否則運行時會報錯的哦!

事后(2013-09-20),在Ruby193\lib\ruby\gems\1.9.1\gems\jekyll-1.2.1\site中發現疑似jekyll官網源碼,且是以jekyll來運行的,於是好奇考出執行jekyll serve命令,誰知報如下錯誤:

Generating... [31m  Liquid Exception: invalid byte sequence in GBK in _posts/2013-05-06-jekyll-1-0-0-released.markdown

初步推測是編碼問題,此時前面提到的編碼問題已經修復,定是其它地方出現此類問題導致。通過jekyll serve --trace命令打印出詳細錯誤信息:

 from C://Ruby193/lib/ruby/gems/1.9.1/gems/liquid-2.5.2/lib/liquid/template.rb:169:in `tokenize'
 from C://Ruby193/lib/ruby/gems/1.9.1/gems/liquid-2.5.2/lib/liquid/template.rb:75:in `parse'
 from C://Ruby193/lib/ruby/gems/1.9.1/gems/liquid-2.5.2/lib/liquid/template.rb:62:in `parse'
 from C://Ruby193/lib/ruby/gems/1.9.1/gems/jekyll-1.2.1/lib/jekyll/tags/include.rb:59:in `render'
 from C://Ruby193/lib/ruby/gems/1.9.1/gems/liquid-2.5.2/lib/liquid/block.rb:137:in `block in render_all'
 from C://Ruby193/lib/ruby/gems/1.9.1/gems/liquid-2.5.2/lib/liquid/block.rb:124:in `each'
 from C://Ruby193/lib/ruby/gems/1.9.1/gems/liquid-2.5.2/lib/liquid/block.rb:124:in `render_all'
 from C://Ruby193/lib/ruby/gems/1.9.1/gems/liquid-2.5.2/lib/liquid/block.rb:110:in `render'
 from C://Ruby193/lib/ruby/gems/1.9.1/gems/liquid-2.5.2/lib/liquid/template.rb:150:in `render'
 from C://Ruby193/lib/ruby/gems/1.9.1/gems/liquid-2.5.2/lib/liquid/template.rb:160:in `render!'
 from C://Ruby193/lib/ruby/gems/1.9.1/gems/jekyll-1.2.1/lib/jekyll/convertible.rb:82:in `render_liquid'
 from C://Ruby193/lib/ruby/gems/1.9.1/gems/jekyll-1.2.1/lib/jekyll/convertible.rb:113:in `render_all_layouts'
 from C://Ruby193/lib/ruby/gems/1.9.1/gems/jekyll-1.2.1/lib/jekyll/convertible.rb:148:in `do_layout'
 from C://Ruby193/lib/ruby/gems/1.9.1/gems/jekyll-1.2.1/lib/jekyll/post.rb:259:in `render'
 from C://Ruby193/lib/ruby/gems/1.9.1/gems/jekyll-1.2.1/lib/jekyll/site.rb:205:in `block in render'
 from C://Ruby193/lib/ruby/gems/1.9.1/gems/jekyll-1.2.1/lib/jekyll/site.rb:204:in `each'
 from C://Ruby193/lib/ruby/gems/1.9.1/gems/jekyll-1.2.1/lib/jekyll/site.rb:204:in `render'
 from C://Ruby193/lib/ruby/gems/1.9.1/gems/jekyll-1.2.1/lib/jekyll/site.rb:36:in `process'
 from C://Ruby193/lib/ruby/gems/1.9.1/gems/jekyll-1.2.1/lib/jekyll/command.rb:18:in `process_site'
 from C://Ruby193/lib/ruby/gems/1.9.1/gems/jekyll-1.2.1/lib/jekyll/commands/build.rb:23:in `build'
 from C://Ruby193/lib/ruby/gems/1.9.1/gems/jekyll-1.2.1/lib/jekyll/commands/build.rb:7:in `process'
 from C://Ruby193/lib/ruby/gems/1.9.1/gems/jekyll-1.2.1/bin/jekyll:99:in `block (2 levels) in <top (required)>'
 from C://Ruby193/lib/ruby/gems/1.9.1/gems/commander-4.1.5/lib/commander/command.rb:180:in `call'
 from C://Ruby193/lib/ruby/gems/1.9.1/gems/commander-4.1.5/lib/commander/command.rb:180:in `call'
 from C://Ruby193/lib/ruby/gems/1.9.1/gems/commander-4.1.5/lib/commander/command.rb:155:in `run'
 from C://Ruby193/lib/ruby/gems/1.9.1/gems/commander-4.1.5/lib/commander/runner.rb:402:in `run_active_command'
 from C://Ruby193/lib/ruby/gems/1.9.1/gems/commander-4.1.5/lib/commander/runner.rb:78:in `run!'
 from C://Ruby193/lib/ruby/gems/1.9.1/gems/commander-4.1.5/lib/commander/delegates.rb:11:in `run!'
 from C://Ruby193/lib/ruby/gems/1.9.1/gems/commander-4.1.5/lib/commander/import.rb:10:in `block in <top (required)>'

之后一個個文件查看了下,發現Ruby193\lib\ruby\gems\1.9.1\gems\jekyll-1.0.3\lib\jekyll\tags\include.rb中有有文件讀取代碼,經如下修改能正常運行:

#原來的代碼
source = File.read(File.join(includes_dir, @file))
    
#修改為以utf-8編碼讀取    
source = File.read(File.join(includes_dir, @file),:encoding=>"utf-8")

可見在解決了一個編碼問題后,同類的問題也就能夠自己解決了,以后再遇到此類編碼問題,便可以自己查看錯誤信息嘗試解決了。從這個問題可以看出,在windows下運行編碼問題着實讓人郁悶啊……

 

 PS:以上是我目前在Windows上使用所遇到的問題(事后遇到問題我會不斷補充),在某些參考文章中還提到其他的一些問題,但我卻沒碰到,可能是版本差異的原因吧,如果有朋友遇到問題,我很樂意交流。

 

參考資料:

http://stackoverflow.com/questions/17364028/jekyll-on-windows-pygments-not-working

http://www.madhur.co.in/blog/2011/09/01/runningjekyllwindows.html

http://stackoverflow.com/questions/14253116/run-jekyll-server-failed-in-win7

http://liufeiyu.cn/github/2012/12/04/how-to-use-git-to-post-articles.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM