Octopressをアップデート は、Mac内で行っていた作業だったんですが、 WindowsのCygwinでもGem等をアップデートして使えるようにしました。
Gemのアップデート
OctopressのディレクトリはDropboxで同期してるので ファイル群は揃っています。
なので、Octopressのディレクトリへ行って
$ bundle install
...
chcp
bundle install
したら試しにサイトを作ってみます。
$ rake generate
## Set the codepage to 65001 for Windows machines
rake aborted!
Errno::ENOENT: No such file or directory - chcp 65001
.../octopress/Rakefile:37:in ``'
.../octopress/Rakefile:37:in `<top (required)>'
(See full trace by running task with --trace)
$
これは、新しいRakefileの最初の方にある
1 2 3 4 5 6 |
|
の部分が原因。 これは、Cygwin等の場合に文字コードを65001(UTF-8)に設定しています。 (これSupport UTF-8 in Markdown filesとかだと別の場所でUTF-8にエンコードしたりしている例。)
日本語を書いてこの部分を削除しても、今のところそんなに問題が出てないのですが (kramdownだから?)、 なんとなくこれを使いたいし、なんでchcpが無いのかわからない。
で、チョット探してみると、似たような物が
/cygdrive/c/Windows/System32/chcp.com
(= C:\Windows\System32\chcp.com)
にあったので これを直接呼んで上げるように、
1 2 3 4 5 |
|
としてあげると動く様になりました。
昔?(むしろ新しいもの?)は、.extと同様に.comファイルも.comの部分を除いた形でも 呼んだりすることが出来た?みたいですが、 今使ってる環境だとこれが呼べない様です。
とりあえず.comを付けておいても悪くはならないようなので加えることに。
Fix the codepage issue for Windows developers · Issue #1835 · jekyll/jekyll
追記
自分のdotfilesを見なおしてみたら、 Cygwinでは最初に
chcp.com 65001 >/dev/null
を.bashrc
の中から呼ぶようになっていました。
dotfiles/.win.sh: https://github.com/rcmdnk/dotfiles/blob/master/.win.sh
なので、上の設定が無くても大丈夫そうだったのはこれのおかげもあるっぽい。
追記ここまで
rebase ruby
chcpを対処したらまたテスト。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
|
みたいなエラーが出ました。
どうも、 CygwinでCan’t fork()とかのエラーが出た時の対処法 の辺でやったみたいにライブラリファイルとかがをrebaseする必要がある様子。
$ cd /usr/lib/ruby/
$ find ./ -name "*.dll" -o -name "*.so" >rebase.lst
$ rebase -n -s -T ./rebase.lst
で上に出てくるstringio.so
も含めたRuby内の全ライブラリをrebase出来ました。
COMSPEC
次にテストしてみると、
$ rake generate
...
Generating...
Liquid Exception: No such file or directory - C:\Windows\system32\cmd.exe in _posts/2014-07-10-test.md/#excerpt
done.
## Restoring stashed posts
みたいな感じでファイルが見つからない、と出ます。
コレに対してはCOMSPECと言う環境変数を
$ export COMSPEC=/cygdrive/c/Windows/System32/cmd.exe
としてあげれば良いとのこと。
(上に出した.win.sh(.winrc)
(.bashrcから呼ばれる)の中に追加しておきます。)
Jekyll on Windows with Cygwin: http://nathanielstory.com/2013/12/28/jekyll-on-windows-with-cygwin.html
python2
もう一度。
$ rake generate
...
Generating...
which: no python2 in (...PATH...)
Liquid Exception: undefined method `match' for nil:NilClass in _posts/2014-07-10-test.md/#excerpt
jekyll 2.1.0 | Error: undefined method `match' for nil:NilClass
と、python2が見つからない、とのこと。
確かに無いわけですが、pythonの2系はインストールしてるわけで、
単にリンクを作ってあげれば良いとのこと
(これもこちらJekyll on Windows with Cygwin参照)。
$ ln -s /usr/bin/python /usr/local/bin/python2
でOK。
これで、ほとんどのポストなんかはbuild出来る様になりました。
一部コードブロックを修正
一部のコードブロックを含むポストをビルドしようとした時に、
Generating...
Liquid Exception: undefined method `[]' for nil:NilClass in _posts/2014-07-10-test.md/#excerpt
jekyll 2.1.0 | Error: undefined method `[]' for nil:NilClass
## Restoring stashed posts
とエラーが出ます。
どうやら、コード内に%
が含まれて、かつ
{% codeblock Rakefile lang:ruby %}
の様に、codeblockに対してファイル名等の引数を与えている場合に起きる様子。
これに対処するには
- codeblockで引数を与えない。({% codeblock %}の様にする)
- %をエスケープ
raw
で囲う
が考えられ、これらは全部有効です。
ただ、ファイル名や言語設定はしたいし、エスケープは環境依存があるかもしれないし結構危険だったりもするので、
raw
タグを使って行うのが他の環境でも悪い影響を与えず、安全かつ有用な感じです1。
(Cygwin特有の問題なのか、それともRubyのバージョンの問題なのか。
Cygwinではapt-cygで取れるrubyがまだ1.9系で、他では2.0.0を使っています。)
とりあえず
これで動くようにはなりました。