Ruby 对于bundler,什么';这是判断宝石是不是“宝石”的最好方法;可要求的;?
在我的档案里说我有Ruby 对于bundler,什么';这是判断宝石是不是“宝石”的最好方法;可要求的;?,ruby,rubygems,bundler,Ruby,Rubygems,Bundler,在我的档案里说我有 group :test do gem 'rspec-core', require: false end 是否有一种简单的方法可以查看测试组是否已捆绑?(例如,在这种情况下,bundle可能在有或无——无测试的情况下被调用) 我找不到,因此我开始寻找rspec core是否是必需的,并找到了一些明显的解决方案: Bundler.definition.index.search("rspec-core") # or Gem.loaded_specs["rspec-cor
group :test do
gem 'rspec-core', require: false
end
是否有一种简单的方法可以查看测试
组是否已捆绑?(例如,在这种情况下,bundle
可能在有或无——无测试的情况下被调用)
我找不到,因此我开始寻找rspec core
是否是必需的,并找到了一些明显的解决方案:
Bundler.definition.index.search("rspec-core")
# or
Gem.loaded_specs["rspec-core"]
确定gem是否需要的最稳定的API是什么
(无需尝试要求它并营救LoadError
)生成Rails应用程序时,通常会包含一行,该行使用Rails.env确定需要哪个组。它看起来应该类似于Bundler.require(:default,Rails.env)
。这通常发生在Rails应用程序的初始化过程中。下面是一些代码的一个片段:
class Rails::Boot
def run
load_initializer
Rails::Initializer.class_eval do
def load_gems
@bundler_loaded ||= Bundler.require :default, Rails.env
end
end
Rails::Initializer.run(:set_load_path)
end
end
因此,如果您对Rails.env进行测试,它将需要测试组中的所有gem 我要说的是
Gem.loaded_specs
比bundler更可靠;我在bundler 1.12.5中发现了一个情况,在我传递给的组中有一个来自GitHub的gem,但没有
,这导致bundler.definition.index.search
提出一个bundler::PathError
引用GitHub中的gem,我故意不捆绑它。你问如何判断gem是否正确“可要求的”或是否需要一个团队?我问的是宝石是否“可要求的”“,我用修辞的方式询问了组以提供上下文。如果您正在搜索的gem可能是显式绑定的gem的依赖项,请使用Bundler。如果ruby文件可以在绑定上下文之外调用,请使用Gem。我建议使用Bundler.definition.index.search(“rspec-core”)
因为更稳定,它几乎从Bundler(2010)开始就没有改变过,还有许多其他内部绑定器方法也使用它。感谢您指出我的问题中的不一致之处。我已经对其进行了更新,以澄清我在问自己是否需要该小组,但是否已将其捆绑。