Rakeコマンドを使って
エラーが出た時、--traceオプションを使って
詳しく調べられるよ、と言うメッセージが出ますが
ここで--traceを渡すのはrakeコマンドに対してになります。
ただ、実際にgenerateタスクとかでエラーが起こってるのは中で呼んでる
Jekyllコマンドがエラーを出してることが大体の時なので
それを詳しく調べたい、と言った時のためにTaskをアップデートしました。
Octopressのgenerateタスク
OctopressのRakefileの中でgenerateタスクは
1 2 3 4 5 6 7 | |
こんな感じになっています。
このままだと単に
Liquid Exception: Unknown tag 'wring' in index.html
とだけ出て終わります。
コレ以外のところでも色々とチェックを入れるため (さらに途中で失敗した時にその先に行かないようにするために)、 こんなラッパーメソッドを作ります。
1 2 3 4 5 6 7 | |
これで
ok_failed_raise system("jekyll build #{trace}")
としておくと、失敗した時に
$ rake generate
...
Source: source
Destination: public
Generating...
Liquid Exception: Unknown tag 'wrong' in index.html
jekyll 2.5.3 | Error: Unknown tag 'wrong'
rake aborted!
FAILD
Rakefile:876:in `ok_failed_raise'
Rakefile:99:in `block in <top (required)>'
Tasks: TOP => gen => generate
(See full trace by running task with --trace)
こんな感じのエラーメッセージが出ます。
ここで--trace(もしくは-t)を使え、と言ってくるので使ってみると
$ rake generate --trace
Source: source
Destination: ~/tmp/octopress/public
Generating...
Liquid Exception: Unknown tag 'wrong' in index.html
jekyll 2.5.3 | Error: Unknown tag 'wrong'
rake aborted!
FAILD
Rakefile:877:in `ok_failed_raise'
...
Tasks: TOP => gen => generate
と、Rakeの部分だけでJekyllコマンド自体は当然ですがtraceなモードになりません。
Rakeへのtraceオプションを拾ってJekyllに渡す
ということでtraceなオプションを付けた時に中で拾って
実行するjekyllコマンドに渡すようにします。
Rakeのタスクの中でTraceを与えたかどうかを見るには
Rake.application.options.trace
がtrueかどうかで判断する事ができます。
1 2 3 4 5 6 7 8 | |
こんな感じ。これでrake generate --traceすると中でも
jekyll build --traceが実行されます。
実際やってみると
$ rake generate --trace
...
Source: source
Destination: public
Generating...
Liquid Exception: Unknown tag 'wrong' in index.html
/Library/Ruby/Gems/2.0.0/gems/liquid-2.6.2/lib/liquid/block.rb:62:in `unknown_tag': Unknown tag 'wrong' (Liquid::SyntaxError)
from /Library/Ruby/Gems/2.0.0/gems/liquid-2.6.2/lib/liquid/block.rb:32:in `parse'
...
from /usr/bin/jekyll:23:in `<main>'
rake aborted!
FAILD
Rakefile:876:in `ok_failed_raise'
Rakefile:99:in `block in <top (required)>'
...
/Library/Ruby/Gems/2.0.0/gems/rake-10.4.2/bin/rake:33:in `<top (required)>'
/usr/bin/rake:23:in `load'
/usr/bin/rake:23:in `<main>'
Tasks: TOP => gen => generate
こんな感じでJekyll(の中のLiquid)の部分のtraceも出来て エラーが何なのか、より詳しく知ることが出来ます。
ちなみにこの
Rake.application.options.trace
ですが、Rake 10.0より前では$traceと言う値で
取ってくる事が出来た様ですが、
10.0以降取り除かれて上のoptionsのみが使える様になっています1。
rake-10.0.0 - Rake – Ruby Make: http://rake.rubyforge.org/doc/release_notes/rake-10_0_0_rdoc.html↩
