2013-04-18 10 views
28

私の宝石のいくつかはrubygemsではなく独自のgemリポジトリからインストールされ、残りはrubygemsからインストールされるようにする必要があります。これをGemfileに設定することはできますか?Rubygemsの同じ名前のgemとの命名の競合を心配する必要はありませんか?どうすれば宝石がどこからダウンロードされるのかを知ることができますか?Ruby Bundler Gemfile内の複数のソース

例えば Gemfile:

source :rubygems 
gem 'gemfromrubygems1' 
gem 'gemfromrubygems2' 

source "http://our.own.gem.repo.com/the/path/to/it" 
gem 'gemfromourrepo' 

答えて

4

私が見つけた唯一の方法は恐ろしいハックのように思えます。

Bundlerは、最後にリストされたソースから始まり、以前にリストされたすべてのソースを検索して、最高のバージョンのgemを検索します。ソース行と宝石行との相対的な位置は関係ありません。

gitと:pathを使って動作させようとしましたが、どちらもgemserversで動作しません。それは最高のバージョンと一致するままになります。

gemのバージョンを2.mine.1のように設定し、それをサーバーにプッシュすると、Gemfileのバージョンを制約できます。

source :rubygems 
source 'http://myrepo'  
gem 'gemfromourrepo', '~> 2.ourrepo' 

次に、お使いのサーバーに最も適したバージョンを選択してください。誰かが同じ名前の宝石を2.rerepo.2でルビー宝石に押し入れる可能性はありますが、それがユニークであればそうはありません。

+0

私はこのソリューションが好きです。なぜなら、開発中の宝石の生産バージョンから生産を引き出すことができるからです。開発中は、宝石の開発バージョンから引き出すことができます。 – LisaD

5

が最後に最初に入力するために入力から検索されます。それはあなたが宝石特定のソースに

gem "foo", "1.0", :path => "bar" 

ソースを設定することができます。

rubygems.orgより常にあなたの宝石を好むと思っています。限り、あなたはあなたの好み(すなわちrubygems.orgからいくつかのアップデートパッケージやプライベートレポからいくつかのDUPを)変えるために必要がないよう、あなたの問題は、単に以下のGemfileで解決されています

source 'https://rubygems.org' 
source 'http://our.own.gem.repo.com/the/path/to/it' 

gem 'gemfromrubygems1' 
gem 'gemfromrubygems2' 
gem 'gemfromourrepo' 
44

バンドラー1.7は、新しいを持っていますあなたがブロックでそれらを入れ子にすることによって、特定の宝石のソースを選択することを可能にする機能:

source "https://rubygems.org" 

gem 'gemfromrubygems1' 
gem 'gemfromrubygems2' 

source "http://our.own.gem.repo.com/the/path/to/it" do 
    gem 'gemfromourrepo' 
end 

またはオプションとして指定:

source "https://rubygems.org" 

gem 'gemfromrubygems1' 
gem 'gemfromrubygems2' 

gem 'gemfromourrepo', source: "http://our.own.gem.repo.com/the/path/to/it" 

詳細については、http://bundler.io/v1.7/gemfile.htmlを参照してください。

関連する問題