2016-09-06 9 views
1

私はRuby 1.9.3で動作する宝石に取り組んでいますが、最新のGemfileをインストールするのはRuby 2.2でしか動作しません。 Rubyのバージョンに基づいて依存関係を分離する方法はありますか?Rubyのバージョンに基づいてgemの依存関係を管理します

私は過去にこのアプローチを見てきました:

pry_debugger = RUBY_VERSION < '2.0.0' ? 'pry-debugger' : 'pry-byebug' 
spec.add_development_dependency pry_debugger 

または私はちょうど1 Rubyのバージョンをサポートして検討する(のが2.0を言わせて)、およびサポート宝石を見つける必要がありますか?私のローカルRubyバージョンでどのような宝石が使えるのかを知る最も簡単な方法は何ですか?

答えて

1

ショーのようなロジックは、バンドルのインストール時に評価されるため、開発の依存関係に問題はありません。

ロジックはgemビルド時に評価され、gemが別の環境で実行される場合は評価されないため、ランタイム依存性は機能しません。 RubyGemsでは、ランタイム環境に基づいて異なる宝石を指定する方法は提供されていないため、異なる宝石スペックを持つ2つの異なる名前の宝石をリリースするという唯一の方法があります。

個人的には、.gemspecに開発依存関係を置くことができないので、私は常にこれらを私のGemfileに追加し、gemspecをランタイム依存関係のためだけに予約します。 これは懸念をよりよく分けて、宝石選択ロジックがgemfileでは使用できるが、gemspecでは使用できないことを明確にしています。

+0

この古い[Yehuda Katzの投稿](http://yehudakatz.com/2010/12/16/clarifying-the-roles-of-the-gemspec-and-gemfile/)には、なぜ ' gemspec'ディレクティブ。 – Sebastian

+1

はい私は間違いなくGemspecディレクティブをGemfileで使用してランタイム依存関係を引き出します。 実際の例を以下に示します:https://github.com/Origen-SDK/test_ids/blob/master/Gemfile – Ginty

関連する問題