20

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

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

这种语法是错误的,因为 :require => false 在那里是出乎意料的,但这或多或少总结了我想用它做什么。有人可以帮我吗?

4

2 回答 2

16

默认情况下,引擎 gemspec 文件中指定的 Gem 确实需要明确要求。来自官方文档- Note that if you want to immediately require dependencies when the engine is required, you should require them before the engine's initialization. 在您的情况下,您应该能够gem.add_dependency 'uuidtools', '2.1.3'在 gemspec 文件中使用类似的东西,并且在相关位置需要。

于 2012-11-16T07:32:22.803 回答
0

我认为完成你所要求的方法是不要把它放在你的 gemspec 中,而是为捆绑器添加一个 Gemfile。然后您可以将其添加为捆绑器安装的 gem。

为此,在 Gemfile 顶部或源声明之后添加简单的单词“gemspec”。这将获取 gemspec 特定的宝石。不过,这基本上不是好的设计。它看起来更像是熵,你应该尽可能避免在 gems 和源代码中使用它。话虽如此,我认为安装 gem 并需要它没有任何危害。它应该被正确命名,并且不会干扰其他任何事情。

鉴于您引用的宝石。你甚至可能不再需要那个宝石了。你在 Ruby 1.9 上吗?如果是这样,那么现在Ruby 中内置了SecureRandom模块。

require 'secure_random'

my_uuid = SecureRandom.uuid

你也可以用它生成一个真正的 UUID!所以你的 DBA 会很高兴并且可以在 Postgres 中使用 UUID 数据类型。(你正在使用 postgres,对吧!哈哈)。同样 IIRC,UUIDTools 不会根据标准生成正确的 UUID。我相信第三个序列是错误的。

于 2012-11-13T16:19:08.160 回答