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↩