Jak określić lokalne pliki .gem w moim pliku Gemfile?
158
Mam kilka plików klejnotów, które instaluję przez gem install xx.gem. Czy mogę powiedzieć Bundlerowi, aby ich używał? Czy muszę określić ścieżkę źródłową?
To nie jest wyłącznie odpowiedź na Twoje pytanie dotyczące instalowania .gempakietów, ale możesz określić wszystkie rodzaje lokalizacji na podstawie klejnotów, edytując plik Gemfile .
Określenie :pathatrybutu spowoduje zainstalowanie klejnotu z tej ścieżki na komputerze lokalnym.
gem "foreman", path:"/Users/pje/my_foreman_fork"
Alternatywnie, określenie :gitatrybutu spowoduje zainstalowanie klejnotu ze zdalnego repozytorium git.
gem "foreman", git:"git://github.com/pje/foreman.git"# ...or at a specific SHA-1 ref
gem "foreman", git:"git://github.com/pje/foreman.git", ref:"bf648a070c"# ...or branch
gem "foreman", git:"git://github.com/pje/foreman.git", branch:"jruby"# ...or tag
gem "foreman", git:"git://github.com/pje/foreman.git", tag:"v0.45.0"
Również w przypadku niektórych zapór firewall problem może stanowić protokół git. W takim przypadku spróbujgem "foreman", :git => "https://github.com/pje/foreman.git"
kode
61
Wydaje się, że pakiet nie może używać plików .gem po wyjęciu z pudełka. Wskazanie: path do katalogu zawierającego pliki .gem nie działa. Niektórzy sugerowali, aby w tym celu skonfigurować lokalny serwer gem (geminabox, stickler).
Jednak okazało się, że znacznie prostsze jest użycie lokalnego „serwera” gemów z systemu plików: po prostu umieść swoje pliki .gem w lokalnym katalogu, a następnie użyj „gem generation_index”, aby uczynić go repozytorium Gem
Dzięki! Potrzebowałem też trzeciego ukośnika, aby wykonać „file: /// Absolute / Path / to / repo”
Anna,
5
Czy nie byłoby łatwiej uruchomić "gem server" w wierszu poleceń i dodać źródło " localhost: 8808 " do swojego pliku Gemfile
Anna
To naprawdę fajny Martin! Dzięki za udostępnienie, właśnie tego szukałem, ponieważ nie chciałem polegać na prowadzeniu gem serverani nie chciałem hostować całego projektu, tylko plik .gem.
Leo Gallucci
6
Dodatkowa wskazówka: możesz obejść bezwzględny wymóg ścieżki, używając File.expand_path w ten sposóbsource "file://#{File.expand_path('.')}/chef-11.10.0.dev.2"
Leo Gallucci,
Nie działa na mnie. Mac OS X. Bundler v1.11.2:Could not fetch specs from file://Users/nakilon/....../
Nakilon
44
Rozpakowałbym twój klejnot w folderze dostawcy aplikacji
Prawdziwe. ale co, jeśli nie zainstalowałem go wcześniej? (podczas wdrażania na serwerze) Nie można znaleźć Imlib2-Ruby-0.5.2 w żadnym z poleceń
source
184
możesz wskazać lokalny katalog z gemem "gemname",: path => "~ / some / local / path"
JHurrah
5
Myślę, że: ścieżka wymaga folderu gem z plikiem gemspec. Mam tylko pliki .gem, które chcę zainstalować.
ddayan
1
OK, więc wdrożenie limitu minęło, ale klejnot nie został zainstalowany. "Nie ma takiego pliku do załadowania - vips": /
ddayan Kwietnia
4
To zdecydowanie nieprawda, przynajmniej już dłużej. Program Bundler nie sprawdza klejnotów systemowych i kieruje się tylko tym, co znajduje się w Gemfile. To jeden z powodów, dla których to takie straszne.
bioneuralnet
6
Możesz zmusić pakera do korzystania z wdrażanych klejnotów za pomocą opcji „pakiet” i „instalacja pakietowa - lokalna”
Na komputerze deweloperskim:
bundle install
(Instaluje wymagane klejnoty i tworzy Gemfile.lock)
bundle package
(Przechowuje klejnoty u sprzedawcy / pamięci podręcznej)
Na serwerze:
bundle install --local
(--lokalne oznacza „użyj klejnotów od sprzedawcy / pamięci podręcznej”)
A jeśli nie mogę niczego zainstalować na serwerze? W tym przypadku muszę budować z rake, ale serwer nie ma klejnotu, którego używam do budowania; ale nie mam problemu ze sprawdzeniem zależności.
Henrik
„Instalacja pakietowa” nie działała, jeśli klejnot nie był uwzględniony w moim istniejącym źródle Gemfile ”
Anna
Po prostu usuń plik klejnotu tymczasowo z pliku klejnotu, zanim to zrobisz. bundle installNastępnie skopiuj plik klejnotu do sprzedawcy / pamięci podręcznej , dodaj klejnot z powrotem do pliku klejnotu i wykonaj bundle install --local
bert bruynooghe
1
bundle packageto świetna sugestia, nawet teraz, trzy lata później. Jeśli twoja wersja Bundlera jest starsza niż 2.0 (jeszcze nie została wydana w chwili pisania tego tekstu), będziesz musiał użyć, bundle package --alljeśli chcesz dołączyć klejnoty z zależnościami pathlub git. Jeśli jednak wykryje takie zależności, wyświetli pomocne przypomnienie.
L2G
1
Do Twojej wiadomości: to może nie działać tak dobrze, jak byś miał nadzieję, jeśli programujesz na innej platformie niż na której wdrażasz (np. Programowanie w systemie macOS, wdrażanie w systemie Linux). Zgodnie z --localdokumentacją: „Zauważ, że jeśli na rubygems.org istnieje odpowiedni klejnot specyficzny dla platformy, nie zostanie on znaleziony”.
Liam Dawson
1
Dodawanie .gemdo vendor/cachewydaje się działać. Żadne opcje nie są wymagane w Gemfile.
Odpowiedzi:
To nie jest wyłącznie odpowiedź na Twoje pytanie dotyczące instalowania
.gem
pakietów, ale możesz określić wszystkie rodzaje lokalizacji na podstawie klejnotów, edytując plik Gemfile .Określenie
:path
atrybutu spowoduje zainstalowanie klejnotu z tej ścieżki na komputerze lokalnym.Alternatywnie, określenie
:git
atrybutu spowoduje zainstalowanie klejnotu ze zdalnego repozytorium git.(Jak @JHurrah wspomniał w swoim komentarzu .)
źródło
gem "foreman", :git => "https://github.com/pje/foreman.git"
Wydaje się, że pakiet nie może używać plików .gem po wyjęciu z pudełka. Wskazanie: path do katalogu zawierającego pliki .gem nie działa. Niektórzy sugerowali, aby w tym celu skonfigurować lokalny serwer gem (geminabox, stickler).
Jednak okazało się, że znacznie prostsze jest użycie lokalnego „serwera” gemów z systemu plików: po prostu umieść swoje pliki .gem w lokalnym katalogu, a następnie użyj „gem generation_index”, aby uczynić go repozytorium Gem
Na koniec wskaż pakiet do tej lokalizacji, dodając następujący wiersz do pliku Gemfile
Jeśli zaktualizujesz klejnoty w repozytorium, pamiętaj, aby ponownie wygenerować indeks.
źródło
gem server
ani nie chciałem hostować całego projektu, tylko plik .gem.source "file://#{File.expand_path('.')}/chef-11.10.0.dev.2"
Could not fetch specs from file://Users/nakilon/....../
Rozpakowałbym twój klejnot w folderze dostawcy aplikacji
Następnie dodaj ścieżkę do Gemfile, aby połączyć rozpakowany klejnot.
źródło
Domyślnie Bundler najpierw sprawdzi twój system i jeśli nie może znaleźć klejnotu, użyje źródeł określonych w twoim Gemfile.
źródło
Możesz zmusić pakera do korzystania z wdrażanych klejnotów za pomocą opcji „pakiet” i „instalacja pakietowa - lokalna”
Na komputerze deweloperskim:
(Instaluje wymagane klejnoty i tworzy Gemfile.lock)
(Przechowuje klejnoty u sprzedawcy / pamięci podręcznej)
Na serwerze:
(--lokalne oznacza „użyj klejnotów od sprzedawcy / pamięci podręcznej”)
źródło
bundle install
Następnie skopiuj plik klejnotu do sprzedawcy / pamięci podręcznej , dodaj klejnot z powrotem do pliku klejnotu i wykonajbundle install --local
bundle package
to świetna sugestia, nawet teraz, trzy lata później. Jeśli twoja wersja Bundlera jest starsza niż 2.0 (jeszcze nie została wydana w chwili pisania tego tekstu), będziesz musiał użyć,bundle package --all
jeśli chcesz dołączyć klejnoty z zależnościamipath
lubgit
. Jeśli jednak wykryje takie zależności, wyświetli pomocne przypomnienie.--local
dokumentacją: „Zauważ, że jeśli na rubygems.org istnieje odpowiedni klejnot specyficzny dla platformy, nie zostanie on znaleziony”.Dodawanie
.gem
dovendor/cache
wydaje się działać. Żadne opcje nie są wymagane wGemfile
.źródło
Wydaje mi się, że najłatwiej jest uruchomić własny serwer gemów przy użyciu
geminabox
Zobacz te proste instrukcje .
źródło