2015-03-22 11 views
11

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 
+0

+ gdy potrzebujemy bundle exec, a kiedy nie? –

+1

Sprawdź te odpowiedzi http://stackoverflow.com/questions/8275885/use-bundle-exec-rake-or-just-rake#answer-8275912 –

+0

Kliknij tutaj, aby uzyskać więcej informacji na temat https://stackoverflow.com/questions/6588674/what-does-bundle-exec-rake-mean – jso1919

Odpowiedz

-2

Masz 3 opcje na typowym systemie:

  1. bin/rake db:migrate
  2. rake db:migrate
  3. 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.

+2

"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. –

+1

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

0

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ę.

1

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

Powiązane problemy