Вы уже активировали 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
Другие вопросы по тегам