在我的Gemfile中说我有
group :test do
gem 'rspec-core', require: false
end
是否有一种简单的方法可以查看test
组是否已捆绑在一起? (例如,在这种情况下,bundle
可能在有或没有--without test
的情况下被调用。
我找不到一个,因此我开始寻找rspec-core
是否可以获得,并找到了一些明显的解决方案:
Bundler.definition.index.search("rspec-core")
# or
Gem.loaded_specs["rspec-core"]
确定宝石是否可以获得的最稳定的API是什么?
(不试图要求并拯救LoadError
)
答案 0 :(得分:3)
当生成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。
答案 1 :(得分:0)
我要继续说Gem.loaded_specs
比通过捆绑包更可靠;我发现了一个捆绑器1.12.5的情况,我在其中一个组中有一个来自GitHub的宝石,我传递给without
,这导致Bundler.definition.index.search
引发Bundler::PathError
引用宝石来自GitHub,我故意不捆绑。