2

假设在一个 Rails 应用程序中,您有一些在您的应用程序中使用的 gem(我们将它们称为“ primary gems ”)并且您已经为可移植性提供了它们。

假设那些“主要宝石”也需要它们自己的宝石——我们将这些称为“次要宝石”。

当你设置你的 environment.rb 时,你必须说:

config.gem 'primary-gem'

对于您直接使用的任何宝石。

但是,你也需要说。. .

config.gem 'secondary-gem'

即使您没有在应用程序中明确使用该 gem?

或者将 gem 包含在您的vendor/gems目录中以使其被您的应用程序拾取就足够了?

4

2 回答 2

5

在部署时,rails 知道您的依赖项,因此如果您想冻结您的 gem,那么您可以运行

rake gems:unpack:dependencies

将它们冻结到供应商目录中。

然而,在运行时,加载它的依赖项是 gems 的工作,通常 gems 会这样做,所以 config.gem 'primary' 应该可以工作。

于 2009-06-21T23:43:50.470 回答
2

不,你没有,或者至少你不应该。每个 GEM 规范都应该包含它自己的依赖项列表。安装主 gem 时,RubyGems 会自动将每个 gem 依赖安装到 cascade 上。

换句话说,如果A需要B需要C+D,你只需要写

config.gem 'A'

当命令

gem install A

运行时,RubyGems 将解析所有依赖项并安装它们。您可以查看所有正在运行的 A 依赖项(来自 Rails 项目)

rake gems

有时,GEM 作者可能会忘记在规范中包含一些 GEM 依赖项。在这种情况下,您应该在 environment.rb 中指定它们以强制应用程序安装它们。当然,与 GEM 维护者联系以解决问题也是一个好主意。

于 2009-06-21T23:46:49.450 回答