Ruby on rails 需要在应用程序中要求gem,即使gempec将其作为运行时依赖项添加?

Ruby on rails 需要在应用程序中要求gem,即使gempec将其作为运行时依赖项添加?,ruby-on-rails,ruby,gem,rubygems,bundler,Ruby On Rails,Ruby,Gem,Rubygems,Bundler,我有一个gem,说gem中使用了'a',gempec文件添加了一个运行时依赖项,说 s、 添加依赖项“A”,“~>1.0” 当我运行我的应用程序时,我得到一个错误,说在gem中找不到某个文件/类。当我在应用程序gem文件中包含gem时,这个错误就会消失 为什么我需要在应用程序中包含gem,尽管它是一个运行时依赖项?这就是gem依赖项的工作方式。当您添加依赖项时,它不会自动要求依赖的gem(事实上,它不能,因为无法知道需要的文件名-并非所有gem都与主文件同名) 向gem添加依赖项有两个效果。首先

我有一个gem,说gem中使用了'a',gempec文件添加了一个运行时依赖项,说

s、 添加依赖项“A”,“~>1.0”

当我运行我的应用程序时,我得到一个错误,说在gem中找不到某个文件/类。当我在应用程序gem文件中包含gem时,这个错误就会消失


为什么我需要在应用程序中包含gem,尽管它是一个运行时依赖项?

这就是gem依赖项的工作方式。当您添加依赖项时,它不会自动要求依赖的gem(事实上,它不能,因为无法知道需要的文件名-并非所有gem都与主文件同名)

向gem添加依赖项有两个效果。首先,当您安装gem时,依赖的gem也会自动安装

其次,当gem被激活时(通常在
需要它的文件时发生,但可以显式地使用它来完成),gem的lib dir被添加到加载路径,任何依赖项的lib dir也是如此。这确保当主gem调用这些依赖项上的
require
时,将使用正确的版本


主gem仍然需要对其依赖项调用
require
。一般来说,Rubygems无法知道应该从gem中获取哪个文件,或者何时(甚至是否)需要。例如,依赖关系可能只在某些情况下才需要,因此您希望避免调用require(这会降低您的速度),除非您实际需要提供的功能。

这正是gem依赖关系的工作方式。当您添加依赖项时,它不会自动要求依赖的gem(事实上,它不能,因为无法知道需要的文件名-并非所有gem都与主文件同名)

向gem添加依赖项有两个效果。首先,当您安装gem时,依赖的gem也会自动安装

其次,当gem被激活时(通常在
需要它的文件时发生,但可以显式地使用它来完成),gem的lib dir被添加到加载路径,任何依赖项的lib dir也是如此。这确保当主gem调用这些依赖项上的
require
时,将使用正确的版本


主gem仍然需要对其依赖项调用
require
。一般来说,Rubygems无法知道应该从gem中获取哪个文件,或者何时(甚至是否)需要。例如,依赖关系可能只在某些情况下才需要,因此您希望避免调用require(这会降低您的速度),除非您确实需要提供的功能。

这有点令人困惑。为什么在gemfile中添加gem依赖项时我们不需要它。@Vinay当将gemfile与Bundler一起使用时,您确实需要
require
,但是Bundler提供了一个
Bundler.require
方法作为一种方便,它需要gemfile中的所有gem。Rails默认使用此选项(如果使用Rails,请检查
config/application.rb
文件),因此在调用
Bundler.require
时需要所有依赖项。(注意Rubygems和Bundler是独立的库(至少目前,将来Rubygems中会包含talk Bundler))。这有点令人困惑。为什么在gemfile中添加gem依赖项时我们不需要它。@Vinay当将gemfile与Bundler一起使用时,您确实需要
require
,但是Bundler提供了一个
Bundler.require
方法作为一种方便,它需要gemfile中的所有gem。Rails默认使用此选项(如果使用Rails,请检查
config/application.rb
文件),因此在调用
Bundler.require
时需要所有依赖项。(请注意,Rubygems和Bundler是独立的库(至少目前,将来Rubygems中包含talk Bundler))。