$ bundle exec rake db:
migrate Verwendet die in der Gemfile angegebene Version des Rakes, um die Rake-Task auszuführen db:migrate
.
In der Gemfile ist jedoch kein Rake-Edelstein angegeben!
Ja, aber ein Rake-Edelstein wurde als Abhängigkeit von einem anderen Edelstein installiert - siehe Gemfile.lock. Die Regel muss also lauten: Verwendet die in Gemfile.lock angegebene Version des Rakes.
Gemfile.lock gibt jedoch keine bestimmte Version an - es gibt eine Version größer als xy an!
Dann muss die Regel lauten: Verwendet die Version des Rakes, die im aktuellen Gemset installiert wurde.
$ rake db: migrate
Normalerweise sucht Ihr System, wenn Sie einen Befehl in der Befehlszeile eingeben, z. B. rake, nach dem Befehl in der Liste der Verzeichnisse, die in Ihrer Umgebungsvariablen PATH angegeben sind. Das erste Verzeichnis, das den Befehl enthält, ist die Version des verwendeten Befehls. Um zu sehen, welches Verzeichnis das ist, können Sie Folgendes tun:
$ which rake
Wenn Sie also ausführen,
$ rake db:migrate
das kann einen anderen Rechenstein verwenden als den, mit dem Sie installiert haben bundle install
. Aber selbst wenn Ihr System dieselbe Rake-Version wie findet bundle exec
, werden alle Edelsteine, die für den Rake-Quellcode erforderlich sind, an Stellen außerhalb des Gemset Ihres Projekts gesucht. Daher gibt es viele Möglichkeiten, die nur:
$ rake db:migrate
kann Dinge vermasseln.
Laut Ruby on Rails Tutorial Book (kostenlos online), Abschnitt 3.6, müssen Sie Befehle nicht mit vorangestellt haben, wenn Sie rvm 1.11.x + verwenden bundle exec
.