2012-01-19 16 views
10

Od the gemfile man page, nauczyłem istnieją dwa sposoby importu klejnotów określonej w Gemfile. bundle.setup "skonfiguruje dodawanie klejnotów do ścieżki ładowania Rubiego", podczas gdy bundle.require będzie wymagać wszystkich klejnotów.Jaka jest różnica między bundle.setup i bundle.require

Jaka jest różnica między tymi dwoma metodami? W jakim stanie powinienem użyć jednego z nich?

+0

Zobacz http://anti-pattern.com/use-bundler-setup-instead-of-bundler-require i http://myronmars.to/ n/dev-blog/2012/12/5-reason-to-avoid-bundler-require z powodu jakiegoś solidnego uzasadnienia, dlaczego powinieneś używać konfiguracji Bundlera (zamiast wymagać), a następnie ręcznie wymagać zależności. –

Odpowiedz

19

Bundler.setup modyfikuje LOAD_PATH, więc możesz robić rzeczy takie jak require 'some_gem' i będą działać. To pozwala wymagać klejnotów "ręcznie". Przed Bundlerem, używając Rubygems, osiągnąłbyś bardzo podobny efekt, robiąc require 'rubygems'.

Bundler.require(:default) z drugiej strony faktycznie wymaga wszystkich klejnotów w Gemfile (zakładając, że nie używasz grup, w innym przypadku wymaga tych w określonych grupach, jeśli podajesz argumenty). Jest skrótem dla wielu stwierdzeń require 'some_gem'.

Zobacz http://gembundler.com/rationale.html. Zauważ, że mówią, że musisz zrobić require 'bundler/setup' przed wykonaniem Bundler.require, ale w praktyce zwykle nie jest to konieczne. Prawie nigdy nie używam Bundler.setup (lub require 'bundler/setup), ponieważ wymagam wszystkich klejnotów za pośrednictwem Bundler.require).

+1

Jeśli dobrze rozumiem, 'Bundler.setup' + kilka instrukcji' require' równa się 'Bundler.require', prawda? – steveyang

+0

Tak, zgadza się. – Confusion

5

Musisz użyć Bundle.setup i możesz użyć Bundle.require.

Głównym celem bundler jest upewnienie się, że dokładnie klejnoty zdefiniowane w Gemfile są widoczne dla aplikacji, tj. Wszystkie klejnoty wymienione w dokładnie wspomnianych wersjach, ale nie więcej. Aby to zrobić, dostosowywana jest ścieżka obciążenia. Odbywa się to przez Bundle.setup.

Aby rzeczywiście użyć klejnotów, muszą one być wymagane, a tym samym załadowane do aplikacji. Można to zrobić ręcznie, używając kilku instrukcji require lub automatycznie dla wszystkich klejnotów wymienionych w Gemfile (lub tylko w niektórych grupach) przy użyciu Bundle.require. Jest to jednak możliwe tylko po dostosowaniu ścieżki ładowania, jak wspomniano powyżej.

0

Bundle.setup nie jest konieczny w przypadku ostatniej wersji bundler. w rzeczywistości, po uruchomieniu Bundler.require, zawsze staram się ustawić poprawne $LOAD_PATH dla Ciebie.

jedyną potrzebą jest:

require 'bundler' Bundler.require

Powiązane problemy