T.I.D.

Git や GitHub と戯れる、オレオレ的おとなの遊び場

common.rb:304: In Escape: Undefined Method Gsub for ... (NoMethodError)

ruby を 1.9.3-p374 に上げたり、jekyll を 0.12.0 に上げたりしていたら、 jekyll-experiment がタイトルのようなエラーを吐くようになってしまった。

とりあえずのモンキーパッチを当てる方法。

エラーの内容

escape メソッドで gsub が未定義だということ。

/Users/****/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/1.9.1/uri/common.rb:304:in `escape': undefined method `gsub' for ["Ruby", "jekyll/hyde"]:Array (NoMethodError)
    from /Users/****/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/1.9.1/uri/common.rb:638:in `escape'
    from /Users/****/.rvm/gems/ruby-1.9.3-p374/gems/jekyll-0.12.0/lib/jekyll/post.rb:140:in `block in url'
    ...

common.rb の該当箇所は、

str.gsub(unsafe) do

post.rb の該当箇所は、

"categories" => categories.map { |c| URI.escape(c) }.join('/'),

どうやら、categories に配列 ["Ruby", "jekyll/hyde"] を指定しているの原因。

モンキーパッチ

URI.escape(c)c を明示的に String に変換する。

"categories" => categories.map { |c| URI.escape(c.to_s) }.join('/'),

う〜ん、これでいいのかなぁ(いいわけない!)。カテゴリのアーカイブを作る時に Ruby/jekyll/hyde になるように、ちゃんと考えなきゃ…。

Comments