【问题标题】:config.gem in environment.rbenvironment.rb 中的 config.gem
【发布时间】:2010-11-04 17:34:11
【问题描述】:

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

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

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

config.gem 'primary-gem'

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

但是,你也需要说。 . .

config.gem 'secondary-gem'

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

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

【问题讨论】:

    标签: ruby-on-rails configuration rubygems environment


    【解决方案1】:

    在部署时,rails 知道你的依赖关系,所以如果你想冻结你的 gem,那么你可以运行

    rake gems:unpack:dependencies
    

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

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

    【讨论】:

      【解决方案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 维护人员以便解决问题。

      【讨论】:

        猜你喜欢
        • 2010-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-02
        • 1970-01-01
        相关资源
        最近更新 更多