しばらくMerb-1.0.3を使ってたのですが、Merb-1.0.6.1にアップデートした所、以下のようなエラーが出たので原因を調査していました。
pre>>
MERB_ROOT/slices/merb-auth-slice-activation/lib/merb-auth-
slice-activation.rb:5:in `load_dependency': wrong number of arguments (1 for 2)
(ArgumentError)
<<--
どうやらload_dependencyの第二引数が省略出来なくなったらしい。
merb-core-1.0.3/lib/merb-core/core_ext/kernel.rb
ruby>>
def load_dependency(name, *ver, &blk) dep = name.is_a?(Gem::Dependency) ? name : track_dependency(name, *ver, &blk
)
gem(dep)
rescue Gem::LoadError => e
Merb.fatal! "The gem #{name}, #{ver.inspect} was not found", e
ensure
begin
require dep.require_as
rescue LoadError => e
Merb.fatal! "The file #{dep.require_as} was not found", e
end
if block = dep.require_block
block.call
end
Merb.logger.verbose!("loading gem '#{dep.name}' ...")
return dep # ensure needs explicit return
end
<<--
これに対して、
merb-core-1.0.6.1/lib/merb-core/core_ext/kernel.rb
ruby>>
def load_dependency(name, clr, *ver, &blk)
begin
dep = name.is_a?(Gem::Dependency) ? name : track_dependency(name, clr, *ve
r, &blk)
return unless dep.require_as
Gem.activate(dep)
rescue Gem::LoadError => e
e.set_backtrace dep.original_caller
Merb.fatal! "The gem #{name}, #{ver.inspect} was not found", e
end
begin
require dep.require_as
rescue LoadError => e
e.set_backtrace dep.original_caller
Merb.fatal! "The file #{dep.require_as} was not found", e
end
if block = dep.require_block
block.call
end
Merb.logger.verbose!("loading gem '#{dep.name}' ...")
return dep # ensure needs explicit return
end
<<--
第二引数のclrが省略出来なくなった模様。
private APIはメジャーバージョンアップじゃなくても仕様変わるのか。
#merbで聞いてみた所、1.0.4から以下のように明示的に指定するようになったらしい。
ruby>>
load_dependency 'merb-slices', :immediate => true
<<--
詳しくは
http://wiki.merbivore.com/releases/1.x/known_issues
参照のこと。
教えてくれたcarpeliamありがとう!
See Also