一部のgemがrubygemsではなく独自のgemリポジトリからインストールされていることを確認する必要がありますが、残りはrubygemsからインストールされます。 Rubygemsで同じ名前のgemとの名前の競合を心配せずに、Gemfileでこれを設定できますか? gemがどこからダウンロードされたかをどのように判断できますか?
例:Gemfile:
source :rubygems
gem 'gemfromrubygems1'
gem 'gemfromrubygems2'
source "http://our.own.gem.repo.com/the/path/to/it"
gem 'gemfromourrepo'
Bundler 1.7には、特定のgemをブロックでネストすることにより、それらのソースを選択できる新機能があります。
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 を参照してください。
Gemfile manpage のSource Priorityセクションに従って、ソースは最後に入力されたものから最初に入力されたものまで検索されます。
あなたが言ったことに基づいて、あなたは常にあなたの宝石を優先したいようですrubygems.org
。好みを変える必要がない限り(つまり、rubygems.org
とプライベートリポジトリからのいくつかの重複)次に、問題は次のGemfile
で簡単に解決されます。
source 'https://rubygems.org'
source 'http://our.own.gem.repo.com/the/path/to/it'
gem 'gemfromrubygems1'
gem 'gemfromrubygems2'
gem 'gemfromourrepo'
私が見つけた唯一の方法は恐ろしいハックのようです。
Bundlerは、最後にリストされたソースから始めて、次に以前にリストされたすべてのソースを検索して、gemの最適なバージョンを検索します。ソース行がgem行に対して相対的であるかどうかは関係ありません。互いに対してのみ相対的です。
:gitと:pathを使用して機能させようとしましたが、gemserversでは機能しません。これで、最良のバージョンに一致します。
Gemのバージョンを2.mine.1のようなものに設定し、それをサーバーにプッシュすると、Gemfileでバージョンを制約できます。
source :rubygems
source 'http://myrepo'
gem 'gemfromourrepo', '~> 2.ourrepo'
次に、最も一致するバージョンがサーバーのバージョンである必要があります。誰かが2.ourrepo.2で同じ名前の自分の宝石をrubygemsにプッシュする可能性がありますが、それが一意であるとは考えられません。
Pathコマンドが役立つかもしれません。宝石固有のソースを設定できます
gem "foo", "1.0", :path => "bar"