Jak zainstalować klejnot ze źródła GitHub?

451

Chciałbym zainstalować gem z najnowszego źródła GitHub.

Jak mam to zrobic?

Vojto
źródło

Odpowiedzi:

332

Jeśli korzystasz z programu pakującego, musisz dodać coś takiego do swojego Gemfile:

gem 'redcarpet', :git => 'git://github.com/tanoku/redcarpet.git'

W przypadku, gdy istnieje .gemspecplik, powinien on móc pobrać i zainstalować klejnot podczas działania bundle install.

UPD. Jak wskazano w komentarzach, aby Bundler działał poprawnie, należy również dodać następujące elementy do config.ru:

require "bundler" 
Bundler.setup(:default)
Misza Reyzlin
źródło
9
Musiałem także dodać następujące (dodawane do mojego config.ru): require "bundler" Bundler.setup(:default)Patrz Bundler docs więcej szczegółów
Louis Sayers
40
Dodatkowo można określić na przykład opcje ref, rozgałęzienia lub tagugem 'redcarpet', :git => 'git://github.com/tanoku/redcarpet.git', :branch => 'yourbranch'
Amit Patel,
25
istnieje również: gem 'redcarpet', github: 'tanoku/redcarpet'. akash.im/2012/06/05/bundler-new-github-option.html
Andrew
@AmitPatel Dziękuję bardzo! : branch => 'yourbranch', twoja linia rozwiązała dla mnie wielki problem. Tobie bardzo wdzięczny.
KM Rakibul Islam
3
@gaussblurinc gem 'redcarpet', :git => 'git://github.com/tanoku/redcarpet.git', :tag => 'v2.3.5'<- :tag => ''część
Misha Reyzlin
400

cóż, to zależy od danego projektu. Niektóre projekty mają plik * .gemspec w katalogu głównym. W takim przypadku byłoby

gem build GEMNAME.gemspec
gem install gemname-version.gem

Inne projekty mają zadanie prowizji, zwane „klejnotem” lub „budowaniem” lub coś w tym rodzaju, w tym przypadku musisz wywołać „prowizję”, ale to zależy od projektu.

W obu przypadkach musisz pobrać źródło.

Dominik Honnef
źródło
2
Dzięki - idealna odpowiedź.
Jon Schoning
20
Tylko wskazówka, aby ludzie wiedzieli, co się naprawdę dzieje. gemname-version.gemPlik jest tworzony podczas wywoływaniagem build
Oczekiwanie na Dev ...
Gdzie gem install gemname-version.gempolecenie instaluje lokalnie klejnot git? Nigdzie w mojej lokalnej maszynie nie mogę znaleźć klejnotu silnika zainstalowanego w ten sposób. Gdzie ukrywa go sprzedawca?
Zielony,
2
Myślę, że gem install gemname-version.gemlinia powinna byćgem install --local gemname-version.gem
JonB
@Green - gem which gemnamepowinien powiedzieć ci, gdzie jest konkretny klejnot, czy to nie działa dla ciebie?
sameers
255

Wypróbuj klejnot specific_install, który pozwala zainstalować klejnot z repozytorium github (np. „Edge”) lub z dowolnego adresu URL. Bardzo przydatne do tworzenia klejnotów i hakowania ich na wielu maszynach.

gem install specific_install
gem specific_install -l <url to a github gem>

na przykład

gem specific_install https://github.com/githubsvnclone/rdoc.git 
Kamek
źródło
3
czy możesz dodać więcej wyjaśnień na temat specific_installklejnotu?
microspino,
1
Właśnie tego szukałem, podobnie jak obsługa pip git w Pythonie. gem specific_install -l <url do projektu na github> działał jak urok!
Murph,
1
ERROR: While executing gem ... (NoMethodError) undefined method 'build' for Gem::Package:Module Brzmi bardzo fajnie, ale nie będę się więcej nad tym zastanawiał. Chciałem tylko napisać, że to nie działało dla mnie na wypadek, gdyby ktoś inny miał zamiar dać mu wir w oparciu o zalecenie SO.
izomorfizm
1
@ isomorphismes +1 do Twojego komentarza. Utworzyłem osobne pytanie dotyczące tego błędu tutaj: stackoverflow.com/questions/27045874/…
La-comadreja
1
To ratownik! Dziękuję Panu.
Noldorin,
33

Bundler pozwala używać klejnotów bezpośrednio z repozytoriów git. W twoim Gemfile:

# Use the http(s), ssh, or git protocol
gem 'foo', git: 'https://github.com/dideler/foo.git'
gem 'foo', git: '[email protected]:dideler/foo.git'
gem 'foo', git: 'git://github.com/dideler/foo.git'

# Specify a tag, ref, or branch to use
gem 'foo', git: '[email protected]:dideler/foo.git', tag: 'v2.1.0'
gem 'foo', git: '[email protected]:dideler/foo.git', ref: '4aded'
gem 'foo', git: '[email protected]:dideler/foo.git', branch: 'development'

# Shorthand for public repos on GitHub (supports all the :git options)
gem 'foo', github: 'dideler/foo'

Aby uzyskać więcej informacji, zobacz https://bundler.io/v2.0/guides/git.html

Dennis
źródło
prawdopodobnie najlepsza odpowiedź
Anton Semenichenko
Pamiętaj, że możesz mieć kłopoty, jeśli zastosujesz to podejście z pasażerem i apache / ngix. Podczas działania bundletakie zależności git-gem nie będą instalowane globalnie, ale zamiast tego w katalogu osobistym bieżącego użytkownika. Pasażer uruchomi ruby ​​jako użytkownik twojego serwera WWW (np. www-data), Który nie ma dostępu do tego katalogu i dlatego ten „git-gem” nie zostanie załadowany. Otrzymasz błąd ... is not yet checked out. Run bundle install first.
fishbone
16

OBSOLETE (patrz komentarze)

Jeśli projekt pochodzi z github i znajduje się na liście na http://gems.github.com/list.html , możesz po prostu dodać repozytorium github do źródeł klejnotów, aby go zainstalować:

$ gem sources -a http://gems.github.com
$ sudo gem install username-projectname
Michael Pereira
źródło
1
rly? właśnie to zrobiłem i DZIAŁAŁO ... przejdź do gems.github.com przed dodaniem go do źródeł yr? (ale nie używaj sudo)
esharp
7
@esharp, obsługują te, które zbudowali, ale już ich nie budują. Jeśli klejnot będzie aktualizowany od 2009 roku , kopia gems.github.com będzie przestarzała.
Tobu,
13

Jeśli dostajesz swoje klejnoty z publicznego repozytorium GitHub, możesz użyć skrótu

gem 'nokogiri', github: 'tenderlove/nokogiri'
Rajeev Kannav Sharma
źródło
4

Ty też możesz to zrobić gem install username-projectname -s http://gems.github.com

Chuck Vose
źródło
6
Przestarzałe, patrz komentarze drugiej odpowiedzi.
Lee Hambley,
1
Nadal pomógł mi problem ze starą bazą kodu. Tak, jest rok 2013 i pracuję nad projektem szyny 2.3.4.
Vivek Sampara,
4

W swoim Gemfile dodaj:

gem 'example', :git => 'git://github.com/example.git'

Możesz także dodać opcje ref, rozgałęzienia i tagu,

Na przykład, jeśli chcesz pobrać z określonego oddziału:

gem 'example', :git => "git://github.com/example.git", :branch => "my-branch"

Następnie uruchomić:

bundle install
slal
źródło
3

Jeśli instalujesz używając bundlera zgodnie z sugestią gryzzly, a gem tworzy plik binarny, upewnij się, że używasz go, bundle exec mygembinaryponieważ gem jest przechowywany w katalogu bundla, który nie jest widoczny na normalnej ścieżce gem.

Mark Cheverton
źródło
2

Na świeżym komputerze z systemem Linux musisz również zainstalować git. Pakiet używa go za kulisami.

użytkownik1208639
źródło