Вы уже активировали рейк 0.9.0, но ваш Gemfile требует рейка 0.8.7

124

Я пытаюсь запустить проект рельсов, получаю

Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.

Если я это сделаю: "установить пакет"

но я получаю

You have already activated rake 0.9.0, but your Gemfile requires rake 0.8.7

делая

rake db:migrate
Муджа Маски
источник

Ответы:

245

Во-первых, убедитесь, что рейк указан в вашем Gemfile. Если это не так, добавьте его и укажите версию «вы уже активировали».

Затем вам нужно указать пакету, что нужно обновить версию рейка, которую он использует для вашего приложения:

bundle update rake

Он обновит ваш Gemfile.lockдля вас.

danneu
источник
2
это не сработало для меня. когда я запускаю эту команду, она делает то же самое, что и «установка пакета», и показывает, что использует ту же версию rake. Это не обновляет.
EE33
5
Мне пришлось добавить гем 'rake', 'version #' в мой gemfile и запустить 'bundle update rake', чтобы мой gemfile.lock обновился правильно. FYI для тех, кто не мог заставить это решение работать на них.
EE33
44

Где вы в настоящее время используете команды rake, такие как

rake db:migrate

Используйте вместо этого:

bundle exec rake db:migrate

так будет до тех пор, пока последняя версия направляющих и / или граблей не будет работать вместе.

Флойд Прайс
источник
3
Немного о том, что «последняя версия рельсов и / или граблей» хорошо работает вместе, имеет значение только в определенный, безымянный момент времени и при некоторых конкретных предположениях об используемом рабочем процессе. Я думаю, это подразумевает, что «вы используете новейшие рельсы, а рейк еще не догнал». Но этот случай может быть решен либо подходом «bundle exec», либо подходом «edit Gemfile», и эти подходы также решают проблему, когда нет внутренних проблем совместимости, а есть только запутанная история рабочего процесса.
jackr
24

Благодарю «Добрый день», ура чувак. но мне нужно было сделать еще немного. вот решение (работает для меня). Я добавил

gem 'rake','0.8.7'

в Gemfile, которого там не было, но моя новая версия rails автоматически устанавливает rake (0.9.0).

после того, как я удалил rake0.9.0, gem uninstall rake и после этого bundle update rakeя могу создать и перенести базу данных.

Муджа Маски
источник
8

Грабли 0.9.0 ломают рельсы.

См. Здесь: Rake 0.9.0 'undefined method' task ''

Используйте bundle exec rakeвместо, rakeчтобы запустить грабли в правильной версии.

sj26
источник
7

Укажите версию, которую вы хотите в своем Gemfile.

gem 'rake', '0.9.0' 

затем

bundle update rake

вам нужно использовать bundle exec для запуска вашей задачи rake

bundle exec rake db:migrate
hacksignal
источник
Кажется, не "деактивировать" более позднюю версию. Однако полное удаление Rake и повторная установка работают.
JosephK
6

О, смотрите, это будущее. Для меня он жаловался, что у меня был установлен rake 10.x, когда он хотел 0.9.5. Не совсем уверен, недостаточно знаком с Ruby, чтобы по-настоящему разобраться, что случилось с номерами последних версий, но я сделал следующее:

gem uninstall rake
gem install rake -v 0.9.5

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

subdigit
источник
2
Будущее зовет, и оно хочет одолжить ваши штаны Hammer.
Кейт Лэйн
Привет, это снова будущее. Я слышал, штаны Hammer наконец-то возвращаются.
подцифра
5

У меня была эта проблема (с другим драгоценным камнем, который не был граблями), и я смог исправить ее,

gem uninstall <complaining gem>
gem install <complaining gem>

bundle install
bundle update

Обратите внимание, что ключевое слово sudo не использовалось (например, sudo bundle install), так как это может поместить ваш драгоценный камень в каталоги, в которых ваше приложение rails может не выполнять поиск.

ледник
источник
3

Если я понимаю, о чем вы не спрашиваете, вам нужно открыть Gemfileфайл и изменить строку ...

gem 'rake', '0.8.7'

... до ...

gem 'rake', '0.9.0'
Оливье Л.
источник
Что, если я хочу использовать 0.8.7 вместо 0.9?
Кир
6
драгоценный камень rake не указан в вашем Gemfile по умолчанию, поскольку он является зависимостью Rails. если вы обновили rake gem до 0.9.0, у вас все еще будет gem 0.8.7 в вашей системе (проверьте с gem list). Я почти уверен, что если gem 'rake', '0.8.7'это все еще указано в вашем Gemfile.lock, он все равно будет использовать гем 0.8.7 без проблем. если нет, то попробуйте запустить bundleпосле добавления gem 'rake', '~> 0.8.7'в ваш Gemfile (не .lock) и посмотрите, говорит ли он что-нибудь.
danneu
Я согласен с @Dobry Den.
Оливье Л.
драгоценный камень «грабли» не определен. Если у меня несколько Gem Rake (0.8.7 и 0.9.0), используется значение по умолчанию. Можем ли мы по умолчанию использовать старую?
Муджах Маски
3

Добавьте это в свой Gemfile

# Rake 0.9.0 break Rails.
gem "rake", "!= 0.9.0"

А затем удалите rake-0.9.0


источник