$ bundle exec rake db: migrate
Использует версию rake, указанную в Gemfile, для выполнения задачи rake db:migrate
.
Но в Gemfile не указан гем rake!
Да, но гем rake был установлен как зависимость какого-то другого гема - смотрите в Gemfile.lock.Таким образом, правило должно быть следующим: использовать версию rake, указанную в Gemfile.lock.
Но Gemfile.lock не указывает конкретную версию - он указывает версию, превышающую xy!
Тогда должно быть правило: Используется версия рейка, которая была установленав текущем наборе драгоценных камней.
$ rake db: migrate
Обычно, когда вы вводите команду в командной строке, например, rake, ваша система ищет команду в списке каталогов, указанном в вашем PATHпеременная окружения.Первый каталог, который содержит команду, является версией используемой команды.Чтобы увидеть, что это за каталог, вы можете сделать:
$ which rake
Так что если вы выполните,
$ rake db:migrate
, то может использовать другой камень рейка, чем тотвы установили с bundle install
.Но даже если ваша система найдет ту же версию рейка, что и bundle exec
, любые драгоценные камни, требуемые исходным кодом rake, будут искать в местах за пределами набора гемов вашего проекта.Поэтому есть много способов, которыми просто:
$ rake db:migrate
может испортить вещи.
Согласно разделу 3.6 учебника по Ruby on Rails (бесплатно онлайн), если вы используете rvm 1.11.x +, вам не нужно вводить команды с bundle exec
.