Podczas pracy rake
pojawia się ten błąd:
Aktywowałeś już rake 0.9.2, ale twój Gemfile wymaga prowizji 0.8.7. Rozważ użycie pakietu exec.
Używanie bundle exec rake
zamiast po prostu rake
wydaje się działać, ale czy jest to najlepszy sposób, aby to naprawić?
Odpowiedzi:
Używanie
bundle exec
to właściwy sposób na zrobienie tego.Zasadniczo dzieje się tak, że zaktualizowałeś rake do 0.9.2, co teraz koliduje z wersją określoną w twoim Gemfile. Poprzednio
rake
Twoja ostatnia wersja pasowała do wersji w twoim Gemfile, więc nie otrzymałeś żadnego ostrzeżenia podczas prostego używaniarake
.Yehuda Katz (jeden z pierwszych deweloperów Bundler) wyjaśnia to wszystko w tym poście na blogu .
Aby uniknąć ciągłego wpisywania
bundle exec ...
, możesz ustawić w powłoce alias lub funkcję dla poleceń, których często używasz w programie Bundler. Na przykład to, czego używam do Rake:źródło
Jeśli masz powód, aby zachować aktualną wersję rake (lub inny klejnot, który powoduje problem), mat ma rację, najlepszym sposobem na to jest bieganie
bundle exec
. Używa wersji określonej w pliku Gemfile zamiast najnowszej wersji zainstalowanego klejnotu. (nathan.f77 ma poniżej dobre rozwiązanie, jeśli nie chcesz pisać zabundle exec
każdym razem, gdy uruchamiasz rake)W przeciwnym razie, jeśli nie ma powodu, aby nie aktualizować prowizji, możesz uruchomić
To faktycznie zaktualizuje twój Gemfile.lock, aby używał najnowszej wersji rake, zamiast konieczności uruchamiania za
bundle exec
każdym razem.Uwaga: jeśli uruchomisz tylko
bundle update
to, zaktualizujesz wszystkie klejnoty w twoim Gemfile zamiast tylko rake'u, co prawdopodobnie nie jest tym, czego chcesz, ponieważ jeśli coś się zepsuje w twojej aplikacji, nie będziesz wiedział, która aktualizacja klejnotów to spowodowała.Mniej zalecanym sposobem na zachowanie starszej wersji bez konieczności używania
bundle exec
jest odinstalowanie nowszych wersji rake.To działa, ale jeśli pracujesz z wieloma aplikacjami, które używają różnych wersji rake, może to być uciążliwe, ponieważ będziesz musiał ciągle instalować i odinstalowywać różne wersje.
źródło
gem install rake
. Następniegem uninstall rake
wybraliśmy 0.9.2.bundle update
zaktualizuje również wszystkie klejnoty bez określonej wersji do najnowszej dostępnej wersji. To może nie być to, czego chcesz.bundle update rake
byłoby więcej cen.public_suffix
zamiastrake
. Bieganiebundle update public_suffix
niestety nie daje efektu.Próbować
bundle clean --force
Usuwa wszystkie klejnoty systemowe, których nie ma w tym pakiecie
źródło
Ostatnim razem, gdy mi się to przydarzyło, zaktualizowałem wszystkie moje klejnoty. Zrobiłem
gem uninstall rake
i wymieniłem opcje wersji. Wybrałem nowszy, a potem nie musiałembundle exec
już używać .Zasadniczo, jeśli używasz
bundle exec
, używa dowolnej wersji klejnotu zainstalowanej w twoim pakiecie, więc co jest w Gemfile. Bezbundle exec
niego używa domyślnej wersji systemu.źródło
Ooh! Artykuł Katz jest doskonały!
Najbardziej podoba mi się to rozwiązanie:
aby móc teraz pisać
Dla kogoś takiego jak ja, który tworzy aplikacje 2.3 i 3.0.9, czuję się o wiele lepiej.
źródło
bundle exec
jest poprawne, ale nie chcesz go wpisywać za każdym razem.Możesz umieścić to w swoim .bashrc:
źródło
Innym sposobem, aby nie wpisywać go za każdym razem, jest na przykład Makefile
źródło