Вы уже активировали X, но ваш Gemfile требует Y
При беге rake
Я получаю эту ошибку:
Вы уже активировали рейк 0.9.2, но ваш Gemfile требует рейка 0.8.7. Подумайте об использовании bundle exec.
С помощью bundle exec rake
вместо просто rake
Кажется, работает, но это лучший способ исправить это?
12 ответов
С помощью bundle exec
это правильный способ сделать это.
По сути, вы обновили рейк до 0.9.2, который теперь конфликтует с версией, указанной в вашем Gemfile. Ранее последняя версия rake
вы соответствовали версии в вашем Gemfile, поэтому вы не получили никакого предупреждения при простом использовании rake
,
Иегуда Кац (один из первых разработчиков Bundler) объясняет все это в этом посте.
Чтобы не печатать bundle exec ...
все время вы можете настроить псевдоним или функцию в своей оболочке для команд, которые вы обычно используете в Bundler. Например, вот что я использую для Rake:
$ type bake
bake is a function
bake ()
{
bundle exec rake "$@"
}
Пытаться bundle clean --force
Он удаляет все системные гемы, не входящие в этот комплект
Если у вас есть причина оставить текущую версию рейка (или любой другой гем, вызывающий проблему), matt верен, лучший способ сделать это - запустить bundle exec
, При этом используется версия, указанная в вашем Gemfile, вместо использования самой новой версии установленного вами гема. (nathan.f77 имеет хорошее решение ниже, если вы не хотите печатать bundle exec
каждый раз запускаешь грабли)
В противном случае, если нет причин не обновлять рейк, вы можете запустить
bundle update rake
Это фактически обновит ваш Gemfile.lock, чтобы использовать новейшую версию rake вместо того, чтобы запускать bundle exec
каждый раз.
Примечание: если вы просто запускаете bundle update
это обновит все гемы в вашем Gemfile, а не просто rake, что, вероятно, не то, что вы хотите, потому что, если что-то сломается в вашем приложении, вы не будете знать, какое обновление gem вызвало это.
Менее рекомендуемый способ сохранить старую версию без использования bundle exec
это удалить более новые версии граблей.
$ gem удалить грабли Выберите камень для удаления: 1. грабли-0.8,7 2. грабли-0.9.2 3. Все версии > 2 Удачно удаленные грабли-0.9.2
Это работает, но если вы работаете с несколькими приложениями, которые используют разные версии рейка, это может быть неприятно, потому что вам постоянно приходится устанавливать и удалять разные версии.
В прошлый раз, когда это случилось со мной, я обновил все свои драгоценные камни. Я сделал gem uninstall rake
и это перечислило варианты версии. Я выбрал более новый, а затем мне не пришлось использовать bundle exec
больше.
В основном, если вы используете bundle exec
он использует любую версию gem, установленную вашим пакетом, и то, что находится в Gemfile. Без bundle exec
он использует ту версию, которая является вашей системой по умолчанию.
Ooh! Статья Каца отличная!
Мне больше нравится это решение:
bundle install --binstubs
так что теперь вы можете напечатать
bin/rake .stuff.
Для такого человека, как я, который разрабатывает приложения 2.3 и 3.0.9, я чувствую себя намного лучше.
bundle exec
правильно, но вы не хотите вводить его каждый раз.
Вы можете поместить это в свой.bashrc:
# Automatically invoke bundler for rake, if necessary.
rake() { if [ -e ./Gemfile.lock ]; then bundle exec rake "$@"; else /usr/bin/env rake "$@"; fi; }
Только что использовал:
bundle update
В моем случае он решил мою проблему с версией зависимостей с файлом Gemfile.lock, он обновил пакеты до последней версии.
Вы также можете удалить файл Gemfile.lock и запуститьbundle install
или просто
bundle
, затем попробуйте еще раз.
Иногда по какой-то причине необходимо установить последние версии драгоценных камней.
Иногда возникает необходимость запуска старых проектов на основе старых версий.
Иногда самый быстрый способ решить подобные проблемы — это удалить и запустить
Если все работает правильно, это самый простой способ.
Это происходит, когда в Gemfile и Gemfile.lock разные версии, в моем случае у меня есть strscan (3.0.3) в Gemfile.lock и ruby 3.0.4 в Gemfile, просто удалите Gemfile.lock и запустите установку пакета или обновление пакета.
Другой способ не вводить его каждый раз - использовать Makefile, например
rake :
bundle exec rake
ошибка уже говорит, что делать здесь. поскольку он предполагает, что для gemfile требуется рейк 0.8.7. но другая версия рейка уже активирована. так что используйте
gem list
Команда для вывода списка всех файлов gem. затем посмотрите, какой гемфайл вы хотите удалить. В вашем случае это грабли 0.9.2. поэтому удалите это, зайдя в папку.
cd /var/lib/gems/3.0.0/gems
и удалите нужную папку. затем обновите драгоценный камень с помощью этой команды.
bundle update