Подтвердить что ты не робот

Вы уже активировали X, но ваш Gemfile требует Y

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

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

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

4b9b3361

Ответ 1

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

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

Yehuda Katz (один из разработчиков Bundler) объясняет все это в этом сообщении в блоге.

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

$ type bake
bake is a function
bake () 
{ 
    bundle exec rake "[email protected]"
}

Ответ 2

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

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

bundle update rake

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

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


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

$ 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

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

Ответ 3

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

В принципе, если вы используете bundle exec, он использует любую версию gem, установленную вашим пакетом, так что в Gemfile. Без bundle exec он использует любую версию вашей системы по умолчанию.

Ответ 4

Ooh! Статья Каца превосходна!

Мне нравится это решение:

bundle install --binstubs

чтобы теперь вы могли ввести

bin/rake .stuff.

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

Ответ 5

bundle exec является правильным, но вы не хотите набирать его каждый раз.

Вы можете поместить это в свой .bashrc:

# Automatically invoke bundler for rake, if necessary.
rake() { if [ -e ./Gemfile.lock ]; then bundle exec rake "[email protected]"; else /usr/bin/env rake "[email protected]"; fi; }