回答:
これは.gem
、パッケージのインストールに関する質問への厳密な回答ではありませんが、Gemfileを編集することで、gemごとにあらゆる種類の場所を指定できます。
:path
属性を指定すると、そのパスからgemがローカルマシンにインストールされます。gem "foreman", path: "/Users/pje/my_foreman_fork"
:git
属性を指定すると、リモートgitリポジトリからgemがインストールされます。gem "foreman", git: "git://github.com/pje/foreman.git"
# ...or at a specific SHA-1 ref
gem "foreman", git: "git://github.com/pje/foreman.git", ref: "bf648a070c"
# ...or branch
gem "foreman", git: "git://github.com/pje/foreman.git", branch: "jruby"
# ...or tag
gem "foreman", git: "git://github.com/pje/foreman.git", tag: "v0.45.0"
gem "foreman", :git => "https://github.com/pje/foreman.git"
バンドルツールはそのままでは.gemファイルを使用できないようです。:pathに.gemファイルを含むディレクトリを指定しても機能しません。一部の人々は、その目的のためにローカルgemサーバー(geminabox、stickler)をセットアップすることを提案しました。
しかし、私がはるかに簡単であることがわかったのは、ファイルシステムからローカルgem "サーバー"を使用することです。.gemファイルをローカルディレクトリに置き、 "gem generate_index"を使用してGemリポジトリにします。
mkdir repo
mkdir repo/gems
cp *.gem repo/gems
cd repo
gem generate_index
最後に、次の行をGemfileに追加して、バンドラーがこの場所を指すようにします。
source "file://path/to/repo"
リポジトリのgemを更新する場合は、必ずインデックスを再生成してください。
gem server
ます。実行に依存したくなかったため、プロジェクト全体をホストしたくなかったので、まさに探していました。.gemファイルのみです。
source "file://#{File.expand_path('.')}/chef-11.10.0.dev.2"
Could not fetch specs from file://Users/nakilon/....../
デフォルトでは、Bundlerは最初にシステムをチェックし、gemが見つからない場合はGemfileで指定されたソースを使用します。
"bundle package"と "bundle install --local"を使用してデプロイしたgemをbundlerに強制させることができます
開発マシンで:
bundle install
(必要なgemをインストールし、Gemfile.lockを作成します)
bundle package
(gemをベンダー/キャッシュにキャッシュします)
サーバー上:
bundle install --local
(--localは「ベンダー/キャッシュからの宝石を使用する」を意味します)
bundle install
その後、gemfileをvendor / cacheにコピーし、gemをgemfileに追加して実行します bundle install --local
bundle package
今でも、3年後の素晴らしい提案です。バンドラーのバージョンが(まだこの書き込みではリリースされません)2.0より古い場合は、使用する必要がありますbundle package --all
あなたが持つ宝石含めたい場合path
やgit
依存関係を。ただし、このような依存関係が検出された場合は、参考になるでしょう。
--local
のドキュメント:「適切なプラットフォーム固有の宝石がrubygems.org上に存在する場合は、それが見つからないということ。」