Beim Ausführen von rake
erhalte ich folgende Fehlermeldung:
Sie haben Rake 0.9.2 bereits aktiviert, aber für Ihr Gemfile ist Rake 0.8.7 erforderlich. Erwägen Sie die Verwendung von Bundle Exec.
Mit bundle exec rake
statt nur rake
scheint zu funktionieren, aber ist es der beste Weg, dies zu beheben?
Mit bundle exec
ist der richtige Weg, um dies zu tun.
Grundsätzlich passiert, dass Sie Rake auf 0.9.2 aktualisiert haben, was jetzt mit der in Ihrem Gemfile angegebenen Version in Konflikt steht. In der letzten Version von rake
haben Sie die Version in Ihrem Gemfile gefunden, sodass Sie keine Warnung erhalten, wenn Sie einfach rake
verwenden.
Yehuda Katz (einer der ursprünglichen Bundler-Entwickler) erklärt alles in diesem Blog-Beitrag .
So vermeiden Sie die Eingabe von bundle exec ...
Sie können jederzeit in Ihrer Shell einen Alias oder eine Funktion für Befehle einrichten, die Sie häufig mit Bundler verwenden. Zum Beispiel ist das, was ich für Rake benutze:
$ type bake
bake is a function
bake ()
{
bundle exec rake "[email protected]"
}
Wenn Sie einen Grund haben, die aktuelle Version von Rake zu behalten (oder welcher Edelstein auch immer das Problem verursacht), ist matt Richtig, der beste Weg ist, bundle exec
auszuführen. Dabei wird die in Ihrer Gem-Datei angegebene Version verwendet, anstatt die neueste Version des Gems zu verwenden, das Sie installiert haben. (nathan.f77 hat eine gute Lösung nten wenn Sie nicht jedes Mal bundle exec
eingeben möchten, wenn Sie Rake ausführen)
Andernfalls können Sie ausführen, wenn kein Grund besteht, Rake nicht zu aktualisieren
bundle update rake
Dadurch wird Ihre Gemfile.lock-Datei tatsächlich aktualisiert, sodass die neueste Version von Rake verwendet wird, anstatt jedes Mal bundle exec
Ausführen zu müssen.
Hinweis: Wenn Sie nur bundle update
Ausführen, werden alle Edelsteine in Ihrem Gemfile aktualisiert, anstatt nur Rake, was wahrscheinlich nicht der Fall ist Sie möchten, denn wenn etwas in Ihrer Anwendung kaputt geht, wissen Sie nicht, welches Juwel-Update es verursacht hat.
Die weniger empfohlene Möglichkeit, die ältere Version zu behalten, ohne bundle exec
Verwenden zu müssen, besteht darin, die neueren Versionen von Rake zu deinstallieren.
$ gem uninstall rake Wählen Sie den zu deinstallierenden Edelstein aus: 1. rake-0.8.7 2. rake-0.9.2 3. Alle Versionen > 2 Rake-0.9.2 Erfolgreich deinstalliert
Dies funktioniert, aber wenn Sie mit mehreren Apps arbeiten, die verschiedene Versionen von Rake verwenden, kann dies zu Problemen führen, da Sie ständig verschiedene Versionen installieren und deinstallieren müssen.
Versuchen bundle clean --force
Es entfernt jeden System-Edelstein, der nicht in diesem Bundle enthalten ist
Das letzte Mal, als mir das passiert ist, hatte ich alle meine Edelsteine aktualisiert. Ich habe ein gem uninstall rake
und es werden die Versionsoptionen aufgelistet. Ich habe mir die neuere ausgesucht und musste dann nicht bundle exec
nicht mehr.
Grundsätzlich gilt, wenn Sie bundle exec
verwendet die Gem-Version, in der Ihr Bundle installiert ist, also die Gem-Datei. Ohne bundle exec
verwendet die von Ihnen voreingestellte Version.
bundle exec
ist richtig, aber Sie möchten es nicht jedes Mal eingeben.
Sie können dies in Ihre .bashrc einfügen:
# 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; }
Oh! Der Katz-Artikel ist ausgezeichnet!
Diese Lösung gefällt mir am besten:
bundle install --binstubs
damit du jetzt tippen kannst
bin/rake .stuff.
Für jemanden wie mich, der sowohl 2.3- als auch 3.0.9-Apps entwickelt, fühle ich mich dadurch viel besser.