我编写了一个具有一定依赖项数组的gem,其中的一些我希望在捆绑到另一个项目中时并不需要它们。一个例子是uuidtools gem,我只想在使用它的文件中要求它。
gem.add_dependency("uuidtools",["=2.1.3"], :require => false)
此语法为假,因为:require => false在这里是意外的,但这或多或少总结了我想用它做的事情。有人可以帮我吗?
默认情况下,确实需要明确指定引擎gemspec文件中指定的宝石。从official documentation-Note that if you want to immediately require dependencies when the engine is required, you should require them before the engine's initialization
。在您的情况下,您应该能够在gemspec文件中获得gem.add_dependency 'uuidtools', '2.1.3'
之类的东西,并且需要在相关位置进行。
我认为完成您所要求的方法不是将其正确放入gemspec中,而是为捆绑程序添加Gemfile。然后,您可以将其添加为捆绑器安装的gem。
为此,在Gemfile的顶部或源声明之后添加简单的单词“ gemspec”。这将拾取gemspec特定的宝石。不过,这基本上不是一个好的设计。似乎更像是熵,应尽可能在gem和源代码中避免这种熵。话虽如此,我认为安装宝石并要求安装它没有任何危害。它应该正确地命名空间,并且不会干扰其他任何内容。
给出您引用的宝石。您甚至可能不再需要该宝石。您正在使用Ruby 1.9吗?如果是这样,那么现在在Ruby中内置了SecureRandom模块。
require 'secure_random'
my_uuid = SecureRandom.uuid
您也可以使用它生成一个真实的UUID!因此,您的DBA会很高兴,并且可以在Postgres中使用UUID数据类型。 (您正在使用postgres,对!哈哈)。同样是IIRC,UUIDTools不会根据标准生成适当的UUID。我相信第三个顺序是错误的。