2013-08-08 2 views
0

Я использую комплект для развертывания драгоценных камней из репозитория git в доме в моем приложении rails. Я хотел бы иметь разные названия отделений для различных групп, однако, это:Название динамической ветки для драгоценных камней, основанных на git

group :production, :release_candidate, :staging, :demo do 
    gem "my_inhouse_gem", '0.0.1', git: '[email protected]:my_gem.git', branch: 'master' 
end 

group :development, :develop do 
    gem "my_inhouse_gem", '0.0.1', git: '[email protected]: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  
[email protected]:my_gem.git (at develop) and 
[email protected]: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: '[email protected]:my_gem.git', branch: my_gem 

Просто использует какую группа печатается последним ,

После того, как прочитал об этом и нашел эту статью: http://yehudakatz.com/2010/05/09/the-how-and-why-of-bundler-groups/, я понимаю, что это связано с тем, что bundler все равно будет выполнять содержимое каждой группы, а затем просто установите те, которые соответствуют.

Как я могу получить динамическое имя ветви на основе конфигурации среды в моем Gemfile?

ответ

2

Bundler не предназначен для обработки этой ситуации так, как вам хотелось бы. Он предназначен для обеспечения последовательного набора драгоценных камней. Группы могут управлять тем, какие камни установлены в каких средах, но не переключать версию драгоценного камня.

Возможно, есть лучший способ выполнить то, что вы хотите. Если вам нужно разработать против экспериментальной версии драгоценного камня, вам, вероятно, лучше делать это в филиале вашего проекта.

Смотрите также: https://github.com/bundler/bundler/issues/751#issuecomment-22113199

+0

Есть ли нет возможности программно подключиться к Bundler :: DSL и извлечь текущее имя группы во время выполнения? –

+0

Нет, это не так работает Бундлер. Он разрешает набор драгоценных камней, прежде чем какие-либо группы придут в игру. –

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 
Смежные вопросы