Gemspec:如何指定不必自动需要的依赖项?

问题描述 投票:16回答:2

我编写了一个具有一定依赖项数组的gem,其中的一些我希望在捆绑到另一个项目中时并不需要它们。一个例子是uuidtools gem,我只想在使用它的文件中要求它。

gem.add_dependency("uuidtools",["=2.1.3"], :require => false)

此语法为假,因为:require => false在这里是意外的,但这或多或少总结了我想用它做的事情。有人可以帮我吗?

ruby-on-rails gem gemspecs
2个回答
12
投票

默认情况下,确实需要明确指定引擎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'之类的东西,并且需要在相关位置进行。


0
投票

我认为完成您所要求的方法不是将其正确放入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。我相信第三个顺序是错误的。

© www.soinside.com 2019 - 2024. All rights reserved.