2016-04-20 2 views
0

Я пытаюсь включить драгоценности из своего локального, а не gemserver в разработку. Моя Gemfile выглядит следующим образом:Бундлер игнорирует группу «без»

group :development do 
    gem "appy_core", path: "../engines/core" 
end 

group :production do 
    gem "appy_core", '1.7.4.5' 
end 

Мой .bundle/config установлен на:

--- 
BUNDLE_WITHOUT: production 

Но когда я бегу bundle я получаю:

[!] There was an error parsing `Gemfile`: You cannot specify the same gem twice with different version requirements. 
You specified: appy_core (>= 0) and appy_core (= 1.7.4.5). Bundler cannot continue. 

Запуск bundle install --without production производит один и тот же результат.

+0

Проблема не в игнорировать производства окр, проблема заключается 'Вы не можете указать тот же самый драгоценный камень дважды с различными требованиями к версии. ' –

+0

@ Зелёный: Таким образом, Бундлер не будет устанавливать производственные драгоценные камни на разработку, но все равно будет выдавать ошибку, если требования к версии различны? –

+0

все равно выдает ошибку, если вы укажете одну и ту же драгоценную камню дважды. –

ответ

1

Единственное решение, которое я придумал/сознаю:

в Gemfile:

gem 'appy_core', 
    git: 'git://github.com/.......', 
    branch: '1.7.4.5' # put the name of the branch that corresponds 

в оболочке локального окружения в:

$ bundle config local.appy_core /path/to/engines/core 

Теперь делать все, что вы хотите в местный филиал, совершить его локально и наслаждаться.


Hack, который работает

С Gemfile прост рубин, можно использовать рубин особенности там:

где-то в постоянных параметрах оболочки:

alias bundle="USE_DEV_VERSION=1 bundle" 

в Gemfile:

if ENV['USE_DEV_VERSION'] 
    gem "appy_core", path: "../engines/core" 
else 
    gem "appy_core", '1.7.4.5' 
end 

Теперь bundle install будет использовать версию dev локально и стандартную драгоценность за пределами «исправленной» среды.

+0

В моем './Bundle/config' у меня теперь есть BUNDLE_LOCAL__APPY_CORE:"/Users/daniel/engines/core "'. Но когда я запускаю 'bundle install', он не использует мой локальный источник. Я не указывал 'git' и' branch' в Gemfile, хотя в качестве удаленного источника был сервер gem. –

+0

1. Откуда вы знаете, что он не использует локальный источник? 2. Я понятия не имею, как 'bundler' обрабатывает локальные настройки, это почти недокументированная функция, которую я обнаружил изредка. Что мешает вам указывать 'git' и' branch'? – mudasobwa

+0

@mudsaobwa 1.При том, что установлен установочный файл версии, не совпадает с основным. 2. Потому что это на сервере драгоценных камней, а не на git-репо. –

0

Поскольку Gemfile выполняется как Ruby-код, вы можете ссылаться на Bundler.settings непосредственно в явном виде исключения дубликатов драгоценных камней в группе:

def without?(group) 
    Bundler.settings.without.include?(group) 
end 

group :development do 
    gem "appy_core", path: "../engines/core" unless without? :development 
end 

group :production do 
    gem "appy_core", '1.7.4.5' unless without? :production 
end 
Смежные вопросы