Как сохранить все гемы в Gemfile совместимыми после обновления

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

Ошибка, которую я получил, была;

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

был для.

Более конкретно, поскольку в моем gemfile для 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.

Любые объяснения будут оценены.

РЕДАКТИРОВАТЬ:
Все мои драгоценные камни для моего приложения находятся в наборе драгоценных камней, и я снова обновил свои драгоценные камни. Если обновление не гарантирует совместимость связанных драгоценных камней?

3 ответа

Решение

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

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

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

bundle exec rake db:migrate

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

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

bundle update

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

Что касается версии rake 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,

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

но так не получается,

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

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

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

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