web-dev-qa-db-ja.com

Gemfileでローカルの.gemファイルを指定するにはどうすればよいですか?

gem install xx.gem経由でインストールするgemファイルがいくつかあります。 Bundlerにそれらを使用するように指示できますか?または、ソースパスを指定する必要がありますか?

149
ddayan

デフォルトでは、Bundlerは最初にシステムをチェックし、gemが見つからない場合、Gemfileで指定されたソースを使用します。

29
JHurrah

これは、厳密に.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"

@ JHurrah彼のコメント で言及されています。)

267
pje

Bundlerはそのままでは.gemファイルを使用できないようです。 .gemファイルを含むディレクトリを:pathにポイントしても機能しません。一部の人々は、その目的のためにローカルgemサーバー(geminabox、stickler)をセットアップすることを提案しました。

ただし、はるかに簡単であることがわかったのは、ファイルシステムのローカルgem "server"を使用することです。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を更新する場合は、必ずインデックスを再生成してください。

58
Martin Thiede

アプリケーションベンダーフォルダーでgemを解凍します

gem unpack your.gem --target /path_to_app/vendor/gems/

次に、Gemfileにパスを追加して、解凍されたgemをリンクします。

gem 'your', '2.0.1', :path => 'vendor/gems/your'
43
edap

「bundle package」および「bundle install --local」を使用して、デプロイしたgemをbundlerに強制的に使用させることができます。

開発マシンで:

bundle install

(必要なgemをインストールし、Gemfile.lockを作成します)

bundle package

(ベンダー/キャッシュに宝石をキャッシュします)

サーバー上:

bundle install --local

(--localは「ベンダー/キャッシュのgemを使用する」ことを意味します)

5

.gemvendor/cacheに追加すると機能するようです。 Gemfileにはオプションは必要ありません。

1
Victor Moroz

geminaboxを使用して独自のgemサーバーを実行するのが最も簡単であることがわかりました

これらの簡単な手順 を参照してください。

0
Dave Sag