2014-11-11 3 views
0

Я работаю на лезвие плагина и бегаю в конфликт зависимостей между моим драгоценным камнем, а другой, который установил:зависимости Противоречивого гема (нож плагин)

$ gem list fog 
fog (1.24.0, 1.20.0, 1.11.1) 

Я установил knife-ec2, который зависит от тумана 1.20. 0. Жемчужина, над которой я работаю, имеет зависимость от тумана 1.23.0. Он не зависит от ножа-ec2 вообще.

Когда я запускаю мой нож плагин, я получаю сообщение об ошибке:

$ knife myplugin 
`raise_if_conflicts': Unable to activate knife-ec2-0.8.0, because fog-1.24.0 conflicts with fog (~> 1.20.0) (Gem::LoadError) 

Если я удаляю нож-EC2, мой нож плагин работает без проблем.

Я не понимаю, зачем загружается ec2-камень, когда я запускаю свой собственный плагин. Нож загружает все плагины? Есть ли способ разрешить плагины с двумя ножами, которые имеют разные версии одной и той же зависимости?

ответ

1

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

Я не вижу ясного способа решить эту проблему для системных плагинов с ножом, но обходной путь. Это не самое элегантное решение, но оно работает для меня и может быть для вас. Это Bundler на основе обходной путь:.

  1. Создать каталог для работы в
  2. Создания Gemfile с неконфликтующими зависимостями. Пример моего файла gem показан ниже.
  3. Установка зависимостей локально с помощью Bundler: bundle install --path vendor/bundle (я использую один и тот же путь, который пакетирования бы установить, чтобы при использовании опции bundle install --deployment и генерирует Gemfile.lock (при условии, что у вас есть последовательное Pathing на ваших местных драгоценных камней)
  4. . Выполнить нож через Bundler: bundle exec knife myplugin -h - успех

у меня есть несколько наборов плагинов, которые мне нужно было работать вместе, так что есть несколько каталогов с Gemfiles в них, что я могу использовать в различных средах: от Bundler друг от друга из каталогов, каждый из которых настроен с различными наборами плагинов.

Образец Gemfile:

source 'https://rubygems.org' 
gem "fog", "~> 1.24" 
gem "knife-myplugin", :path => "/path/to/myplugin" 
Смежные вопросы