Как сохранить все гемы в Gemfile совместимыми после обновления - PullRequest
15 голосов
/ 27 октября 2011

Мой вопрос уже был задан здесь , но я пытаюсь понять причины этого, а не то, как его обойти.

Я получил ошибку;

You have already activated rspec-core 2.7.1, but your Gemfile requires rspec-core 2.6.4. Using bundle exec may solve this. (Gem::LoadError)

Теперь мне были предложены различные решения, такие как использование «mpapis-bundler» или создание сокращения для «bundle exec», но у меня сложилось впечатление, что именно это

$bundle install --binstubs

было для.

В частности, поскольку в моем gem-файле для rspec-rails не указаны номера версий, почему у меня такая несовместимость? Моя ошибка также произошла, когда я попытался

$rake db:migrate

говорит мне, что

You have already activated rake 0.9.2.2, but your Gemfile requires rake 0.9.2. Consider using bundle exec.

Любые объяснения приветствуются.

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

Ответы [ 3 ]

34 голосов
/ 27 октября 2011

Это происходит, когда вы устанавливаете более свежие гемы в вашей системе, чем те, что в вашем приложении Rails.

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

Этоцель запуска:

bundle exec rake db:migrate

-> запуск той же самой версии рейка, которую предоставляет ваш Gemfile.

Что касается обновления гемов из gemfile, просто выполните:

bundle update

Самый простой способ избежать такого рода скучных вещей - это изолировать ваши драгоценные камни, создав наборы драгоценностей.Я использую RVM для этой цели.

1 голос
/ 12 апреля 2012

Что касается версии рейка 0.9.2.2, любой из способов - создать новый набор гемов для проекта и поддерживать версию гема в соответствии с вашим Gemfile.

Например, если есть два rake gem, содержащие версии 0.9.2 и 0.9.2.2, указывающие версию rake '0.9.2', хотя она устанавливается, но не запускает никаких задач, кроме сообщения об ошибке

'Вы уже активировали рейк 0.9.2.2, но ваш Gemfile требует рейка 0.9.2. Использование bundle exec может решить эту проблему. '

Я ожидаю, что пакетная установка заблокирует версию gem в Gemfile.lock и выберет грабли 0.9.2, но он ищет в наборе гемов, где по умолчанию включен rake 0.9.2.2.

Просто напоминая цель установки пакета из гибкой веб-разработки с книгой rails,

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

но так не работает,

Лучше удалить rake 0.9.2.2 и использовать rake 0.9.2 или использовать пакет обновления rake, который обновляет версию rake в Gemfile.lock до 0.9.2.2

0 голосов
/ 07 ноября 2011

Как сказал @apneadiving, запуск "$ bundle install" обновляет все ваши буллды. Однако после запуска «$ bundle install --binstubs» я по-прежнему получал ошибки для несовместимых гемов, когда пропускал часть «bundle exec».

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

...