QA@IT

Gemfileでgemの順序は気にすべきでしょうか?

3383 PV

mongoid と rails3-jquery-autocomplete を併用している時に気づいたのですが、 Gemfile 上で mongoid よりも上に rails3-jquery-autocomplete を書いてしまうと、 rails3-jquery-autocomplete がロードされるタイミングで、 mongoid はロードされていないため、 rails3-jquery-autocomplete の Orm として mongoid が選択されないという問題に悩まされました。
https://github.com/crowdint/rails3-jquery-autocomplete/blob/master/lib/rails3-jquery-autocomplete/autocomplete.rb#L6

gem の並び順を変更することでこの問題は解消したのですが、 Gemfile における gem の並び順の情報はそれほど重要ではないと思っていたため、今後 gem を追加する際に気を遣わなければいけないことなのか気になり質問しました。

また、このような問題に対して、 gem の順序ではなく他に明示的な解決方法があれば教えていたきたいと思います。

回答

require オプションで依存関係を明示してやるのはどうでしょうか。

gem 'rails3-jquery-autocomplete', require: %w(mongoid rails3-jquery-autocomplete)
gem 'mongoid'
編集 履歴 (0)
  • requireはboolean以外の値も設定できるんですね。勉強になります。 -

これは rails3-jquery-autocomplete の実装があまりよろしくないと思います。

Rails 3からは初期化のフックがRailtieに整理されているので、自分自身がloadされたタイミングで Mongoid::Document を探しに行くのではなく、initializerのフックでこの初期化を行うべきです。

ほとんどのgemはこの新しい作法にのっとっていますので、gemの順番を意識することはまずないと思います。パッチを書いて送ってあげると感謝されると思いますよ。 :)

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。