我有一个宝石说'A'用在gem中,gemspec文件添加了运行时依赖项
s.add_dependency'A','〜> 1.0'
我收到一条错误,说我运行应用程序时在gem中找不到某个文件/类。当我在应用程序Gemfile中包含gem时,这个错误消失了。
为什么我需要在应用程序中包含gem,尽管它是运行时依赖项?
答案 0 :(得分:3)
这就是gem依赖项的工作原理。当你添加一个依赖项时,它不会自动要求依赖于gem(实际上它不能,因为没有办法知道要求的文件名 - 并非所有的gems都与它们的主文件同名)。
向gem添加依赖项有两个效果。首先,当您安装gem时,也会自动安装依赖于gem的宝石。
其次,当gem 激活时(通常在你require
文件时发生,但可以用gem
明确地完成)宝石的lib目录是添加到加载路径,任何依赖项的lib目录也是如此。这可以确保当主gem在这些依赖项上调用require
时,将使用正确的版本。
主要宝石仍然需要在其依赖项上调用require
。一般来说,Rubygems无法知道应该要求哪个文件来自gem,或者何时(或者甚至是)它应该发生。例如,在某些情况下可能只需要依赖项,因此您希望避免调用require(这会降低您的速度),除非您确实需要提供的功能。