Jestem trochę nowy w pakiecie i generuje pliki. Mam kopię repozytorium git z GitHub, do którego wielu ludzi przyczynia się, więc zdziwiłem się, widząc, że bundler utworzył plik, który nie istniał w repozytorium i nie był na .gitignore
liście.
Od kiedy go rozwidliłem, wiem, że dodanie go do repozytorium nic nie zepsuje dla repozytorium głównego, ale jeśli wykonam żądanie ściągnięcia, czy spowoduje to problem?
Czy powinien Gemfile.lock
zostać uwzględniony w repozytorium?
git
version-control
bundler
aarona
źródło
źródło
Odpowiedzi:
Zakładając, że nie piszesz rubygem, Gemfile.lock powinien znajdować się w twoim repozytorium. Jest używany jako migawka wszystkich wymaganych klejnotów i ich zależności. W ten sposób pakiet nie musi ponownie obliczać wszystkich zależności klejnotów przy każdym wdrożeniu itp.
Z komentarza cowboycoded poniżej:
Oto fajny artykuł wyjaśniający, czym jest plik blokady.
źródło
Prawdziwy problem występuje, gdy pracujesz nad aplikacją Railsową typu open source, która musi mieć konfigurowalny adapter bazy danych. Rozwijam gałąź Rails 3 Fat Free CRM. Moje preferencje to postgres, ale chcemy, aby domyślną bazą danych była mysql2.
W takim przypadku
Gemfile.lock
nadal muszę być zalogowany za pomocą domyślnego zestawu klejnotów, ale muszę zignorować zmiany, które wprowadziłem na moim komputerze. Aby to osiągnąć, uruchamiam:i odwrócić:
Przydatne jest również dołączenie do kodu czegoś takiego jak poniższy kod
Gemfile
. Spowoduje to załadowanie odpowiedniego klejnotu adaptera bazy danych na podstawie pliku database.yml.Nie mogę powiedzieć, czy jest to sprawdzona najlepsza praktyka, czy nie, ale działa dobrze dla mnie.
źródło
Ja i moi koledzy z pracy mamy różne pliki Gemfile.lock, ponieważ używamy różnych platform, okien i komputerów Mac, a naszym serwerem jest system Linux.
Postanawiamy usunąć Gemfile.lock w repozytorium i utworzyć Gemfile.lock.server w repozytorium git, podobnie jak database.yml. Następnie przed wdrożeniem na serwerze kopiujemy Gemfile.lock.server do Gemfile.lock na serwerze za pomocą haka wdrażania cap
źródło
Zgadzając się z r-dubem, zachowaj kontrolę nad źródłami, ale dla mnie prawdziwa korzyść jest taka:
współpraca w identycznych środowiskach (bez względu na windohs i Linux / Mac). Przed Gemfile.lock następny koleś instalujący projekt mógł zobaczyć wszelkiego rodzaju mylące błędy, obwinianie siebie, ale był po prostu tym szczęściarzem, który dostał kolejną wersję super klejnotu, łamiąc istniejące zależności.
Co gorsza, stało się to na serwerach, otrzymywanie wersji nieprzetestowanej, chyba że zdyscyplinowano ją i zainstalowano dokładną wersję. Gemfile.lock wyraźnie to określa i wyraźnie powie ci, że twoje wersje są różne.
Uwaga: pamiętaj o grupowaniu rzeczy, takich jak: programowanie i: test
źródło
Dokumenty Bundlera odnoszą się również do tego pytania:
ORYGINALNY: http://gembundler.com/v1.3/rationale.html
EDYCJA: http://web.archive.org/web/20160309170442/http://bundler.io/v1.3/rationale.html
Zobacz sekcję „Sprawdzanie kodu w kontroli wersji”:
źródło
Brak Gemfile.lock oznacza:
-> Zawsze sprawdzaj w Gemfile.lock, usuń go, jeśli chcesz być dokładniejszy https://grosser.it/2015/08/14/check-in-your-gemfile-lock/
źródło
Trochę za późno na imprezę, ale odpowiedzi zajęły mi trochę czasu i zagraniczne lektury, aby zrozumieć ten problem. Chcę więc podsumować to, co dowiedziałem się o Gemfile.lock.
Podczas budowania aplikacji Railsowej używasz określonych wersji klejnotów na lokalnej maszynie. Jeśli chcesz uniknąć błędów w trybie produkcyjnym i innych gałęziach, musisz użyć tego jednego pliku Gemfile.lock wszędzie i poinstruować sprzedawcę, aby
bundle
odbudował klejnoty za każdym razem, gdy się zmieni.Jeśli
Gemfile.lock
zmieniło się na twoim komputerze produkcyjnym, a Git na to nie pozwalagit pull
, powinieneś pisać,git reset --hard
aby uniknąć zmiany pliku i pisaćgit pull
ponownie.źródło