Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 对于bundler,什么';这是判断宝石是不是“宝石”的最好方法;可要求的;?_Ruby_Rubygems_Bundler - Fatal编程技术网

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)开始就没有改变过,还有许多其他内部绑定器方法也使用它。感谢您指出我的问题中的不一致之处。我已经对其进行了更新,以澄清我在问自己是否需要该小组,但是否已将其捆绑。