Управление конфликтующими зависимостями в 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 в проект, он все равно будет использоваться во время развертывания.