2011-09-07 3 views
12

私はローカルに開発している別の宝石を必要とするSinatraアプリケーションを持っています。開発中に私の地元の宝石コードを使用するようにBundlerを設定するのに問題がありますが、私の製造元の宝石コードは製造中です。開発中に異なるGemソースを使用するようにBundler/Gemfileを設定するにはどうすればよいですか?

理想的には、私はこのような何かを行うことができますが、バンドラーはあなたが二度同じ宝石を指定することはできません:私は手動で宝石のソースを更新宝石&をvendoringに頼ってきた一方

# Doesn't work: 
group :development do 
    gem 'awesome', :path => "~/code/awesome" 
end 

group :production do 
    gem 'awesome', :path => "vendor/gems/awesome-0.0.1" 
end 

私が展開するたびにGemfileで、これはかなり面倒です。私のワークフローはこれです:開発中、私の地元の宝石へ

  1. ポイント(gem 'awesome', :path => "~/code/awesome"
  2. vendor/gems
  3. 更新Gemfileに、アンパック宝石を展開する準備が宝石をvendoredを指すようにすると(gem 'awesome', :path => "vendor/gems/awesome-0.0.1"
  4. ランbundle install(Gemfile.lockを更新する)
  5. 展開コード
  6. 戻るステップ1.

どのような面倒です!私は現在の設定を自動化するためにRakeタスクを書くよりも綺麗なことをしたいと思っています。

このシナリオにはどのようなワークフローが最適ですか?

答えて

2

明らかに、あなたのGemfileで普通のRubyを使うことができます。 this articleによれば、使用したい宝石のバージョンを選択できるように、環境変数(または見つけた他の変数)を設定することができます。

## based on an ENV variable 
if ENV['RACK_ENV'] == "development" 
    gem 'awesome', :path => "~/code/awesome" 
else 
    gem 'awesome', :path => "vendor/gems/awesome-0.0.1" 
end 

多分それはうまくいくでしょう。ベンダーにあなたの進行中の宝石を必要とするなら、ENVを設定し、ベンダーにそれを設定し、ENVをリセットする小さなスクリプトを作ることができるかもしれません。え?

bundle config local.rack ~/path/to/local/rack 

これだけ作品宝石はGemfileで指定されたGitのレポや枝を持っている場合:

+0

この記事で先に提案したことを試してみましたが、大部分は問題ありません。問題は、私がデプロイするとき、Gemfile.lockがローカルのgemを参照していることです(最後の2つのコードサンプルを参照)。 Gemfile.lockをgitから完全に除外したり、配備したり、配備したりすることはできますが、これらのオプションのいずれかが最良の方法であるかどうかはわかりません。 –

+0

ええ、私は同じことを達成したいが、これを行うためのきれいな方法がないようだ。 –

13

単にのように、local.gem_name設定オプションをspecyfingことで、それを行うことを可能にする新機能があります。ここで

-3

http://bundler.io/v1.3/bundle_config.htmlは私が完全に動作するように取得していない提案である(酒宴のテーマに使用され、私はテーマからいくつかのスタイルシートの問題を得た):

詳細はTHRバンドラーのドキュメントを参照してください

group :production do 
     gem 'gemname', '~> 0.1.6', :git => 'git://github.com/foouser/gemname.git' 
end 

group :development do 
     gem 'gemnamedev', :path => '~/path/gemname' # use local version 
end 

gemname.gemspecファイルを複製してgemnamedev.gemspecとし、その中のs.nameを "gemnamedev"に変更します。

+0

これは動作しません。 Bundlerは、さまざまな情報源からの2つの宝石を持つことができないというエラーを表示します – jakecraige

関連する問題