webentwicklung-frage-antwort-db.com.de

Du hast X bereits aktiviert, aber dein Gemfile benötigt Y

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?

111
ming yeow

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]"
}
80
matt

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.

59
Ryan

Versuchen bundle clean --force

Es entfernt jeden System-Edelstein, der nicht in diesem Bundle enthalten ist

23
Oleg Dikusar

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.

13
paarshad

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; }
8
ndbroadbent

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.

7
nessur