しばらくMerb-1.0.3を使ってたのですが、Merb-1.0.6.1にアップデートした所、以下のようなエラーが出たので原因を調査していました。

   1  MERB_ROOT/slices/merb-auth-slice-activation/lib/merb-auth-
   2  slice-activation.rb:5:in `load_dependency': wrong number of arguments (1 for 2) 
   3  (ArgumentError)

どうやらload_dependencyの第二引数が省略出来なくなったらしい。

merb-core-1.0.3/lib/merb-core/core_ext/kernel.rb

   1    def load_dependency(name, *ver, &blk)    dep = name.is_a?(Gem::Dependency) ? name : track_dependency(name, *ver, &blk
   2  )
   3      gem(dep)
   4    rescue Gem::LoadError => e
   5      Merb.fatal! "The gem #{name}, #{ver.inspect} was not found", e
   6    ensure
   7      begin
   8        require dep.require_as
   9      rescue LoadError => e
  10        Merb.fatal! "The file #{dep.require_as} was not found", e
  11      end
  12  
  13      if block = dep.require_block
  14        block.call
  15      end
  16      Merb.logger.verbose!("loading gem '#{dep.name}' ...")
  17      return dep # ensure needs explicit return
  18    end

これに対して、

merb-core-1.0.6.1/lib/merb-core/core_ext/kernel.rb

   1    def load_dependency(name, clr, *ver, &blk)
   2      begin
   3        dep = name.is_a?(Gem::Dependency) ? name : track_dependency(name, clr, *ve
   4  r, &blk)
   5        return unless dep.require_as
   6        Gem.activate(dep)
   7      rescue Gem::LoadError => e
   8        e.set_backtrace dep.original_caller
   9        Merb.fatal! "The gem #{name}, #{ver.inspect} was not found", e
  10      end
  11  
  12      begin
  13        require dep.require_as
  14      rescue LoadError => e
  15        e.set_backtrace dep.original_caller
  16        Merb.fatal! "The file #{dep.require_as} was not found", e
  17      end
  18  
  19      if block = dep.require_block
  20        block.call
  21      end
  22  
  23      Merb.logger.verbose!("loading gem '#{dep.name}' ...")
  24      return dep # ensure needs explicit return
  25    end

第二引数のclrが省略出来なくなった模様。 private APIはメジャーバージョンアップじゃなくても仕様変わるのか。

#merbで聞いてみた所、1.0.4から以下のように明示的に指定するようになったらしい。

   1  load_dependency 'merb-slices', :immediate => true

詳しくは http://wiki.merbivore.com/releases/1.x/known_issues 参照のこと。

教えてくれたcarpeliamありがとう!

See Also

posted by Png genki on Fri 19 Dec 2008 at 04:08

Comments:

or Preview
Social Bookmarks
  • Delicious
  • B_entry1145
  • Clip_16_12_w
Services from s21g
twpro(ツイプロ)
Twitterプロフィールを快適検索
地価2009
土地の値段を調べてみよう
MyRestaurant
自分だけのレストラン手帳
Formula
ブログに数式を埋め込める数式コミュニティ