$ bundle exec rake db: migrate
Використовує версію rake, вказану в Gemfile, для виконання завдання rake db:migrate
.
Але в Gemfile не вказано жодної граблі-граблі!
Так, але самоцвіт rake був встановлений як залежність якогось іншого дорогоцінного каменя - дивіться у Gemfile.lock. Тож правило повинно бути: Використовує версію rake, зазначену в Gemfile.lock.
Але Gemfile.lock не вказує конкретну версію - він вказує версію, більшу за xy!
Тоді правило має бути таким: Використовується версія rake, яка була встановлена в поточному gemset.
$ rake db: мігруйте
Зазвичай, коли ви видаєте команду в командному рядку, наприклад, rake, ваша система шукає команду у списку каталогів, зазначених у вашій змінній середовища PATH. Перший каталог, що містить команду, - це версія команди, яка використовується. Щоб побачити, який це каталог, ви можете зробити:
$ which rake
Отже, якщо ви виконаєте,
$ rake db:migrate
що може використовувати інший грабель, ніж той, який ви встановили bundle install
. Але навіть якщо ваша система знайде таку саму версію rake bundle exec
, будь-які дорогоцінні камені, необхідні вихідному коду rake, будуть шукатись у місцях, що не входять у ваш проект. Тому існує багато способів, які просто:
$ rake db:migrate
може все зіпсувати.
Відповідно до підручника Ruby on Rails (безкоштовно в Інтернеті), розділ 3.6, якщо ви використовуєте rvm 1.11.x +, вам не потрібно вводити команди перед bundle exec
.