26

宝石をリストする順序は重要ですか? これら 2 つのブロックは同等ですか?

gem 'carrierwave'
gem 'rmagick'

gem 'rmagick'
gem 'carrierwave'
4

2 に答える 2

15

使用する場合Bundle.require(Rails ではそうです)、Gemfile に表示される順序で Gem が必要です。ずっとこうだったわけではありませんが、しばらくはそうでした。

Carrierwave は必要なときに RMagick を明示的に要求するので、あなたの場合は問題にならないと思います。しかし、厳密に言えば、2 つのブロックは同等ではありません。

于 2013-05-23T23:08:35.760 に答える
10

Bundler は、リストされている順序で gem の依存関係をロードしません* が、次の基準を使用してソースの優先順位に従ってロードします。

  1. 明示的なパスまたは git オプションが gem の依存関係に追加されます。例:

    gem 'some-gem', github: 'somebody/some-gem'
    
  2. 他の gem 依存関係からgem 'actionmailer'暗黙的に必要とされる gemの明示的に定義された依存関係。gem 'rails'

  3. 複数のソースが追加されている場合は、最後から最初に検索されます。

https://bundler.io/man/gemfile.5.html#SOURCE-PRIORITYを参照


編集: Mattの回答によると、何をしようとしているのか(またはロードしている宝石)によっては、順序重要になる場合があります。bundler を使用しても、gem の注文が重要になる可能性がある を参照してください。

于 2013-05-23T22:23:39.327 に答える