Rubygems は、Ruby のバージョンごとに異なる依存関係を指定する適切な方法を提供していません。gemspec に条件を入れると、インストールされるものを切り替えることができます。
if RUBY_VERSION < "1.9"
# ruby 1.8 only supports nokogiri < 1.6
s.runtime_dependency "nokogiri", ">= 1.4.0", "< 1.6"
else
s.runtime_dependency "nokogiri", ">= 1.4.0"
end
しかし、これはロードされるものを制御しません。ロードパスに新しいバージョンがあれば、それが ruby 1.8 と互換性がない場合でもロードされます。
これが実際に問題なのかどうかはわかりません: rbenv/rvm などを使用している場合、ルビーごとに異なる gem パスがあるため、両方を同じ場所にインストールしないことを願っています。標準のgemパスでも互換バージョン(1.8/1.9.1)で分かれていると思います。それはこれを処理することを意図したものですか、それとも両方のバージョンが一緒にインストールされる状況に陥ることはありますか?
もう 1 つのアプローチは、gemspec をオープンエンド (条件なし) のままにし、必要に応じて Gemfile に正しいバージョン制約を設定するようにユーザーに警告することです。
どの方法が好ましいですか?