Как сохранить все драгоценные камни в 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, когда я добавил еще один камень, и теперь они работают. Я предполагаю, что несовместимость была решена создателями драгоценных камней.