Вы уже активировали X, но ваш Gemfile требует Y - PullRequest
106 голосов
/ 11 июня 2011

При запуске rake я получаю эту ошибку:

Вы уже активировали рейк 0.9.2, но ваш Gemfile требует рейка 0.8.7. Рассмотрите возможность использования комплекта exec.

Использование bundle exec rake вместо rake работает, но лучше ли это исправить?

Ответы [ 6 ]

77 голосов
/ 18 июня 2011

Использование bundle exec - это правильный способ сделать это.

В основном происходит обновление рейка до 0.9.2, что теперь конфликтует с версией, указанной в вашемGemfile.Ранее в последней версии rake вы соответствовали версии в вашем Gemfile, поэтому вы не получили никакого предупреждения при простом использовании rake.

Иегуда Кац (один из первоначальных разработчиков Bundler) объясняет этовсе в этом сообщении в блоге .

Чтобы не вводить bundle exec ... постоянно, вы можете настроить псевдоним или функцию в своей оболочке для команд, которые вы обычно используете в Bundler.Например, вот что я использую для Rake:

$ type bake
bake is a function
bake () 
{ 
    bundle exec rake "$@"
}
58 голосов
/ 07 июля 2011

Если у вас есть причина оставить текущую версию рейка (или любой другой камень, вызывающий проблему), matt правильный, лучший способ сделать это - запустить bundle exec. При этом используется версия, указанная в вашем Gemfile, вместо использования самой новой версии установленного вами гема. (у nathan.f77 есть хорошее решение ниже , если вы не хотите вводить bundle exec каждый раз, когда запускаете рейк)

В противном случае, если нет причин не обновлять рейк, вы можете запустить

bundle update rake

Это фактически обновит ваш Gemfile.lock, чтобы использовать новейшую версию рейка вместо того, чтобы каждый раз запускать bundle exec.

Примечание: если вы запустите просто bundle update, это обновит все гемы в вашем Gemfile, а не просто рейк, что, вероятно, не то, что вы хотите, потому что если что-то сломалось в вашем приложении, вы выиграли Не знаю, какое обновление драгоценного камня вызвало его.


Менее рекомендуемый способ сохранить старую версию без использования bundle exec - удалить более новые версии rake.

$ gem uninstall rake

Select gem to uninstall:
 1. rake-0.8.7
 2. rake-0.9.2
 3. All versions
> 2
Successfully uninstalled rake-0.9.2

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

19 голосов
/ 26 мая 2018

Попробуйте bundle clean --force

Удаляет все системные гемы, не входящие в этот комплект

13 голосов
/ 11 июня 2011

В прошлый раз, когда это случилось со мной, я обновил все свои драгоценные камни. Я сделал gem uninstall rake, и он перечислил варианты версии. Я выбрал более новый, и тогда мне больше не приходилось использовать bundle exec.

По сути, если вы используете bundle exec, он использует любую версию гема, установленную вашим пакетом, и то, что находится в Gemfile. Без bundle exec он использует любую версию по умолчанию для вашей системы.

8 голосов
/ 06 августа 2011

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; }
7 голосов
/ 17 июня 2011

Ooh!Отличная статья о Каце!

Мне больше всего нравится это решение:

bundle install --binstubs

, так что теперь вы можете набирать

bin/rake .stuff.

Для такого, как я, который разрабатываети приложения 2.3, и 3.0.9, я чувствую себя намного лучше.

...