0

バンドラーを使用して、社内の git リポジトリから Rails アプリに gem をデプロイしています。グループごとに異なるブランチ名を付けたいのですが、これは次のとおりです。

group :production, :release_candidate, :staging, :demo do
  gem "my_inhouse_gem", '0.0.1', git: 'git@github.com:my_gem.git', branch: 'master'
end

group :development, :develop do
   gem "my_inhouse_gem", '0.0.1', git: 'git@github.com:my_gem.git', branch: 'develop'
end

で失敗します

You cannot specify the same gem twice coming from different sources.
You specified that mygem (= 0.0.1) should come from      
git@github.com:my_gem.git (at develop) and
git@github.com:my_gem.git (at master)

次の場合:

group :production, :release_candidate, :staging, :demo do
  my_gem = 'master'
end

group :development, :develop do
  my_gem = "develop"
end

gem "my_inhouse_gem", '0.0.1', git: 'git@github.com:my_gem.git', branch: my_gem

最後に印刷されたグループを使用するだけです。

それを読んで、この記事を見つけた後: http://yehudakatz.com/2010/05/09/the-how-and-why-of-bundler-groups/、これはバンドラーがまだコンテンツを実行するためであることに気付きましたすべてのグループの、一致するものをインストールするだけです。

Gemfile の環境設定に基づいて動的ブランチ名を付けるにはどうすればよいですか?

4

2 に答える 2

2

Bundler は、この状況を思い通りに処理するようには設計されていません。一貫した宝石のセットを提供することを目的としています。グループは、どの環境にどの gem をインストールするかを制御できますが、gem のバージョンを切り替えることはできません。

あなたが望むものを達成するためのより良い方法があるかもしれません。gem の実験的なバージョンに対して開発する必要がある場合は、プロジェクトのブランチで開発する方がよいでしょう。

参照: https://github.com/bundler/bundler/issues/751#issuecomment-22113199

于 2013-08-09T06:26:42.013 に答える
0

これは私が問題を回避した方法です:

私のGemfileの上部に:

     rails = ENV['RAILS_ENV'] || 'default'

その後:

if rails.match /develop/i or rails.match /ci/ or rails.match /test/ or rails.match /default/i
  # if you wish to test locally against your branch
  #in_house_version = 'your_branch'
  in_house_version = 'develop'
else
  in_house_version = 'master'
end
于 2013-08-09T18:08:13.833 に答える