Come installare gem dal sorgente GitHub?


451

Vorrei installare gem dall'ultima fonte GitHub.

Come faccio a fare questo?

Risposte:


332

Nel caso in cui utilizzi il bundler, devi aggiungere qualcosa del genere al tuo Gemfile:

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

E in caso di .gemspecfile, dovrebbe essere in grado di recuperare e installare la gemma durante l'esecuzione bundle install.

UPD. Come indicato nei commenti, affinché Bundler funzioni correttamente è inoltre necessario aggiungere quanto segue a config.ru:

require "bundler" 
Bundler.setup(:default)

9
Avevo anche bisogno di aggiungere quanto segue (aggiunto al mio config.ru): require "bundler" Bundler.setup(:default)vedi i documenti del bundler per maggiori dettagli
Louis Sayers,

40
Inoltre, è possibile specificare, ad esempio, le opzioni ref, branch o taggem 'redcarpet', :git => 'git://github.com/tanoku/redcarpet.git', :branch => 'yourbranch'
Amit Patel,

25
c'è anche: gem 'redcarpet', github: 'tanoku/redcarpet'. akash.im/2012/06/05/bundler-new-github-option.html
Andrew

@AmitPatel Grazie mille !!! : branch => 'yourbranch', questa linea ha risolto un grosso problema per me proprio ora. Tanto grato a te.
KM Rakibul Islam

3
@gaussblurinc gem 'redcarpet', :git => 'git://github.com/tanoku/redcarpet.git', :tag => 'v2.3.5'<- la :tag => ''parte
Misha Reyzlin,

400

bene, dipende dal progetto in questione. Alcuni progetti hanno un file * .gemspec nella loro directory principale. In tal caso, lo sarebbe

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

Altri progetti hanno un compito di rake, chiamato "gem" o "build" o qualcosa del genere, in questo caso devi invocare "rake", ma ciò dipende dal progetto.

In entrambi i casi devi scaricare la fonte.


2
Grazie - risposta perfetta.
Jon Schoning,

20
Solo un consiglio per far sapere alle persone cosa sta realmente accadendo. Il gemname-version.gemfile viene creato quando si richiamagem build
Waiting for Dev ...

Dove gem install gemname-version.gemcomando installa la gemma git localmente? Non riesco a trovare da nessuna parte nella mia macchina locale una gemma del motore installata in questo modo. Dove lo nasconde Bundler?
Verde,

2
Penso che la gem install gemname-version.gemlinea dovrebbe esseregem install --local gemname-version.gem
JonB

@Verde - gem which gemnamedovrebbe dirti dove si trova una gemma specifica, non funziona per te?
stessi

255

Prova la gemma specific_install che ti consente di installare una gemma dal suo repository github (come 'edge') o da un URL arbitrario. Molto utile per biforcare gemme e hackerarle su più macchine e simili.

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

per esempio

gem specific_install https://github.com/githubsvnclone/rdoc.git 

3
potresti aggiungere ulteriori spiegazioni sulla specific_installgemma?
microspino,

1
Questo è esattamente quello che stavo cercando, simile al supporto pip git di Python. gem specific_install -l <url per proiettare su github> ha funzionato come un incantesimo!
Murph,

1
ERROR: While executing gem ... (NoMethodError) undefined method 'build' for Gem::Package:Module Sembra molto bello ma non lo esaminerò ulteriormente. Volevo solo postare che non ha funzionato per me nel caso in cui qualcun altro stia per dare un vortice basato sulla raccomandazione SO.
isomorfismi

1
@isomorphismes +1 al tuo commento. Ho creato una domanda separata su questo errore qui: stackoverflow.com/questions/27045874/...
La-comadreja

1
Questo è un vero toccasana! Grazie Signore.
Noldorin,

34

Bundler ti consente di usare le gemme direttamente dai repository git. Nel tuo 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'

Per ulteriori informazioni, consultare https://bundler.io/v2.0/guides/git.html


probabilmente la migliore risposta
Anton Semenichenko il

Nota che potresti avere problemi se usi questo approccio con passeggero e apache / ngix. Durante l'esecuzione bundle, tali dipendenze git-gem non verranno installate a livello globale ma nella directory home dell'utente corrente. Passenger eseguirà ruby ​​come utente del tuo server web (ad es. www-data) Che non ha accesso a questa directory e quindi questo "git-gem" non verrà caricato. Riceverai un errore ... is not yet checked out. Run bundle install first.
lisca di pesce

16

OBSOLETO (vedi commenti)

Se il progetto proviene da github e contenuto nell'elenco su http://gems.github.com/list.html , puoi semplicemente aggiungere il repository github alle fonti gemme per installarlo:

$ gem sources -a http://gems.github.com
$ sudo gem install username-projectname

1
vero? ho appena fatto questo e ha funzionato ... vai su gems.github.com prima di aggiungerlo alle tue fonti immagino? (ma non usare sudo)
esharp

7
@esharp, ospitano quelli che hanno costruito, ma non li costruiscono più. Se la gemma è stata aggiornata dal 2009 , una copia di gems.github.com sarà obsoleta.
Tobu,

13

Se stai ricevendo le tue gemme da un repository GitHub pubblico, puoi usare la scorciatoia

gem 'nokogiri', github: 'tenderlove/nokogiri'

4

Anche tu puoi fare gem install username-projectname -s http://gems.github.com


6
Obsoleto, vedi i commenti dell'altra risposta.
Lee Hambley,

1
Mi ha ancora aiutato per un problema con una vecchia base di codice. Sì, è il 2013 e sto lavorando a un progetto di binari 2.3.4.
Vivek Sampara,

4

Nel tuo Gemfile, aggiungi quanto segue:

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

Puoi anche aggiungere opzioni ref, branch e tag,

Ad esempio, se si desidera scaricare da un determinato ramo:

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

Quindi eseguire:

bundle install

3

Se si installa utilizzando il bundler come suggerito da gryzzly e la gemma crea un binario, assicurarsi di eseguirlo bundle exec mygembinarypoiché la gemma è memorizzata in una directory del bundler che non è visibile sul normale percorso gem.


2

Su una nuova macchina Linux devi anche installare git. Bundle lo usa dietro le quinte.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.