让我们说在Rails应用程序中你有一些你在你的应用程序中使用的宝石(我们称之为“ 主要宝石 ”)你已经为它们出售了它们可移植性。
让我们说那些“主要宝石”也需要他们自己的宝石 - 我们称之为“次要宝石”。 < / p>
在设置environment.rb时,您必须说:
config.gem 'primary-gem'
您正在使用的任何宝石。
但是,你还需要说。 。 。
config.gem 'secondary-gem'
,即使您未在应用中明确使用该宝石?
或者仅仅将gem包含在 vendor/gems
目录中,以便它可以被您的应用选中?
答案 0 :(得分:5)
在部署时,rails知道您的依赖关系,因此如果您想冻结您的宝石,那么您可以运行
rake gems:unpack:dependencies
将它们冻结到供应商目录中。
在运行时,加载它的依赖项是gems的工作,通常gems会这样做,所以config.gem“primary”应该可以工作。
答案 1 :(得分:2)
不,你没有,或者至少你不应该。每个GEM规范都应该包含它自己的依赖列表。安装主gem时,RubyGems会自动在级联上安装每个gem依赖项。
换句话说,如果A要求B需要C + D,你只需要写
config.gem 'A'
当命令
gem install A
运行,RubyGems将解析所有依赖项并安装它们。 您可以查看所有运行的A依赖项(来自Rails项目)
rake gems
有时候,GEM作者可能会忘记在规范中包含一些GEM依赖项。在这种情况下,您应该在environment.rb中指定它们以强制应用程序安装它们。当然,与GEM维护人员联系也是一个好主意,以便解决问题。