Как сохранить все драгоценные камни в 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.

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

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

Ответы

Ответ 1

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

Bundler просто сообщает ou, что вы должны придерживаться тех состояний Gemfile.

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

bundle exec rake db:migrate

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

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

bundle update

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

Ответ 2

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

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

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

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

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

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

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

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

Ответ 3

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

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