Jaka jest różnica między używaniem prowizji bin/rake i grab exec. A który jest preferowanym stylem?Czym różni się prowizja od bin/rake i grab exec
bin/rake db:migrate
bundle exec rake db:migrate
Jaka jest różnica między używaniem prowizji bin/rake i grab exec. A który jest preferowanym stylem?Czym różni się prowizja od bin/rake i grab exec
bin/rake db:migrate
bundle exec rake db:migrate
Masz 3 opcje na typowym systemie:
bin/rake db:migrate
rake db:migrate
bundle exec db:migrate
Pierwszą opcją jest po prostu wywołanie ścieżkę do programu rake
, którego launcher można znaleźć w ukrytym /bin
folder. Ten program uruchamiający jest zwykle dowiązaniem symbolicznym do treści programu znalezionym w katalogu /.rvm
. Możesz znaleźć jego oryginalną lokalizację, wykonując $ which rake
, co da ci coś w rodzaju /home/ubuntu/.rvm/gems/[email protected]/bin/rake
.
Domyślnie druga opcja jest zasadniczo taka sama jak pierwsza w większości systemów. Jest to tak zwany alias, który jest po prostu skrótowym poleceniem dla jakiegoś innego programu. Jest to zdefiniowane gdzieś w ustawieniach powłoki jako coś takiego jak alias rake='/bin/rake'
. Możliwe, że ten alias jest wskazany na inny program na twoim komputerze, więc sprawdź to przed odebraniem mojego słowa.
Podczas korzystania z bundle exec
mówisz bundlerowi, aby upewnić się, że zostały załadowane tylko klejnoty i ich określone wersje z twojego Gemfile.lock
. Będzie to działać tylko wtedy, gdy znajdujesz się w katalogu zawierającym Gemfile.lock
lub którego katalog nadrzędny/dodatkowy zawiera taki katalog.
"taki sam jak pierwszy na większości systemów" - bardzo w to wątpię (że większość systemów ma ten alias). Zamiast tego, nagi "rake" wywoła to z globalnej listy gemów, a nie z pakietu tej aplikacji. –
w rzeczywistości jest trochę prawdy w tej odpowiedzi. Rvm faktycznie kofruje ścieżkę, tak że 'rake ...' uruchamia twoje pliki binarne projektu.W rzeczywistości istnieje wtyczka dla rbenv, która pozwala ci zrobić to samo. 'which' wskazuje na RVM/rbenv, który z kolei wskazuje na bin, chociaż ostatnie zalecenia sugerują wskazanie bundler na .bundle/bin jako szynach ma własne skrypty. – PhilT
bin/rake
jest rodzajem kodu dla polecenia rake z dołączonych klejnotów. Ma dokładnie taką samą funkcję jak bundle exec rake
. Aby uzyskać więcej informacji na temat kodu pośredniczącego, zobacz http://bundler.io/v1.14/man/bundle-install.1.html i wyszukaj numer binstubs
. Zauważ również, że bin/rake
i bin/rails
są kodami generowanymi przez Railsy, które różnią się kodem od kodów pośredniczących generowanych przez bundler. Jednak wszystkie służą temu samemu celowi i mają tę samą funkcję.
bundle exec
wykonuje polecenie w kontekście aplikacji. Ponieważ każda aplikacja może mieć różne wersje klejnotów. Korzystanie z pakietu exec gwarantuje, że używasz poprawnych wersji.
Używam bundle exec
zawsze zamiast rake, ponieważ mam wiele aplikacji działających w moim systemie.
Zawsze staraj się używać bundle exec rake db:migrate
.
Możesz dowiedzieć się więcej o tym tutaj Official documentation
+ gdy potrzebujemy bundle exec, a kiedy nie? –
Sprawdź te odpowiedzi http://stackoverflow.com/questions/8275885/use-bundle-exec-rake-or-just-rake#answer-8275912 –
Kliknij tutaj, aby uzyskać więcej informacji na temat https://stackoverflow.com/questions/6588674/what-does-bundle-exec-rake-mean – jso1919