为什么当我已经在使用另一个gem的依赖项时,我需要显式包含它?

时间:2018-11-09 21:59:25

标签: ruby-on-rails rubygems dependency-management

我创建了一个gem / Rails引擎(我们将其称为 my_rails_gem ),该引擎依赖于另一个gem;具体来说,composite_primary_keys宝石(某些模型需要它)。所以在.gemspec文件中,我有

Gem::Specification.new do |s|
  #...
  s.add_dependency 'composite_primary_keys'

问题是,当我在另一个Rails项目的Gemfile中包含 my_rails_gem 并尝试使用模型时,会出现有关 composite_primary_keys '功能的错误。我还必须将gem 'composite_primary_keys'明确添加到应用的Gemfile中,以使其正常运行。

这是为什么?这不是Bundle和gem依赖的全部要点吗?我想减轻使用 my_rails_gem 的开发人员的负担,记住必须包含 composite_primary_keys ,但这特别是在避免这种情况。我是在做错什么,还是我的期望/理解错了?

1 个答案:

答案 0 :(得分:1)

我相信不自动需要从属gem的原因是让您的宝石用户(您)可以选择要求从属gem。这是有原因的,但是对话时间较长。

如果您希望在包含宝石时自动要求从属宝石,则可以在my_rails_gem.rb文件中(在lib目录中):

require 'composite_primary_keys'

我认为应该为您解决这个问题。至少,我就是这么做的。

此外,如果从属gem具有要包含的样式表和JavaScript资源(我怀疑composite_primary_keys没有),则需要向my_rails_gem.js和{{ 1}}(或您使用的任何模板引擎)。