Управление конфликтующими зависимостями в Gemfile.lock

В моем файле gemspec:

  • У меня есть gem-зависимость zconfig, для которой явно требуется net-ssh версии 2.6.8
  • Я также использую net-sftp, который, в свою очередь, требует версию net-ssh>= 2.6.5

Когда я bundle install, bundler достаточно умен, чтобы распознавать потребности обоих гемов и правильно определяет 2.6.8 как версию net-ssh для установки.

net-sftp (2.1.2)
  net-ssh (>= 2.6.5)
...
net-ssh (2.6.8)
...
zconfig (0.2.7)
  mysql (~> 2.9.1)
  mysql2 (~> 0.3.13)
  net-ssh (~> 2.6.8)
  net-ssh-gateway (~> 1.2.0)
  sequel (~> 4.1.0)
  sqlite3 (~> 1.3.7)

До сих пор во время тестирования на удаленном сервере я клонировал проект и устанавливал эти гемы с bundle install --deployment а затем запустить проект с использованием локально установленных поставщиков, используя bundle exec ..

Тем не менее, теперь я закончил разработку, и я упаковал проект как драгоценный камень и установил его на удаленном сервере. Проблема в том, что при выполнении gem ruby ​​не соответствует моей спецификации Gemfile.lock и используется net-ssh 2.7.0, что вызывает конфликт:

/usr/local/rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:1615:in `raise_if_conflicts': Unable to activate zconfig-0.2.7, because net-ssh-2.7.0 conflicts with net-ssh (~> 2.6.8) (Gem::LoadError)

Есть ли способ сделать что-то вроде bundle exec my_gem чтобы он использовал спецификации Gemfile.lock?

1 ответ

Решение

Просто определите конкретную версию гема для требуемой версии, добавив следующую строку в гемфайл:

gem 'net-ssh', '2.6.8'

или в thinegem.gemspec:

spec.add_dependency 'net-ssh', '2.6.8'

И если вы добавили gemfile.lock в проект, он все равно будет использоваться во время развертывания.

Другие вопросы по тегам