Gemfile中的宝石顺序是否有所不同?

时间:2013-05-23 21:54:46

标签: ruby-on-rails ruby gemfile

您列出宝石的顺序是否重要?这两个块是等价的吗?

gem 'carrierwave'
gem 'rmagick'

gem 'rmagick'
gem 'carrierwave'

2 个答案:

答案 0 :(得分:14)

使用Bundle.require(Rails确实如此)时,Gems按照它们在Gemfile中出现的顺序是必需的。 In并不总是这样,但是has been this way for a while

由于Carrierwave在需要时明确要求RMagick,我认为这不重要;但严格来说,两个街区并不相同。

答案 1 :(得分:7)

Bundler不按您列出的顺序加载gem依赖项 *,但它确实按照此标准按源优先级进行:

  1. 显式路径或git选项附加到gem依赖项,例如:

    gem 'some-gem', github: 'somebody/some-gem'
    
  2. 显式定义了宝石的依赖关系,否则需要隐式地从其他宝石属性中隐藏,即gem 'actionmailer'

  3. 隐含地要求gem 'rails'宝石
  4. 如果您添加了多个来源,则会从最后一个搜索到第一个。

  5. 请参阅http://gembundler.com/v1.3/man/gemfile.5.html#SOURCE-PRIORITY


    * 编辑:根据马特的回答,根据您要做的事情(或您正在加载的宝石),订单可能很重要。请参阅Even with bundler your gem order can be significant