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


451

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

Jak mam to zrobic?

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)

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.


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 

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: 'git@github.com:dideler/foo.git'
gem 'foo', git: 'git://github.com/dideler/foo.git'

# Specify a tag, ref, or branch to use
gem 'foo', git: 'git@github.com:dideler/foo.git', tag: 'v2.1.0'
gem 'foo', git: 'git@github.com:dideler/foo.git', ref: '4aded'
gem 'foo', git: 'git@github.com: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


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

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'

4

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


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

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.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.