¿Cómo instalar gem desde la fuente de GitHub?

451

Me gustaría instalar la gema de la última fuente de GitHub.

¿Cómo hago esto?

Vojto
fuente

Respuestas:

332

En caso de que esté utilizando un paquete, debe agregar algo como esto a su Gemfile:

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

Y en caso de que haya un .gemspecarchivo, debería poder recuperar e instalar la gema cuando se ejecute bundle install.

UPD Como se indica en los comentarios, para que Bundler funcione correctamente, también debe agregar lo siguiente a config.ru:

require "bundler" 
Bundler.setup(:default)
Misha Reyzlin
fuente
99
También necesitaba agregar lo siguiente (agregado a mi config.ru): require "bundler" Bundler.setup(:default)ver los documentos del paquete para más detalles
Louis Sayers
40
Además, se pueden especificar opciones de referencia, ramificación o etiqueta, por ejemplogem 'redcarpet', :git => 'git://github.com/tanoku/redcarpet.git', :branch => 'yourbranch'
Amit Patel el
25
también hay: gem 'redcarpet', github: 'tanoku/redcarpet'. akash.im/2012/06/05/bundler-new-github-option.html
Andrew
@AmitPatel ¡Muchas gracias! : branch => 'yourbranch', tu esta línea me ha resuelto un gran problema en este momento. Muchas gracias a ti.
KM Rakibul Islam
3
@gaussblurinc gem 'redcarpet', :git => 'git://github.com/tanoku/redcarpet.git', :tag => 'v2.3.5'<- la :tag => ''parte
Misha Reyzlin
400

bueno, eso depende del proyecto en cuestión. Algunos proyectos tienen un archivo * .gemspec en su directorio raíz. En ese caso, sería

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

Otros proyectos tienen una tarea de rastrillo, llamada "gema" o "compilación" o algo así, en este caso hay que invocar "rastrillo", pero eso depende del proyecto.

En ambos casos tienes que descargar la fuente.

Dominik Honnef
fuente
2
Gracias, respuesta perfecta.
Jon Schoning
20
Solo un consejo para que la gente sepa lo que realmente está sucediendo. El gemname-version.gemarchivo se crea cuando se invocagem build
Waiting for Dev ...
¿Dónde gem install gemname-version.geminstala el comando la gema git localmente? No puedo encontrar en ninguna parte de mi máquina local una gema de motor instalada de esta manera. ¿Dónde lo esconde bundler?
Verde
2
Creo que la gem install gemname-version.gemlínea debería sergem install --local gemname-version.gem
JonB
@Green: gem which gemnamedebería decirte dónde está una gema específica, ¿no te funciona?
Sameers
255

Pruebe la gema específica_instalación que le permite instalar una gema desde su repositorio github (como 'edge'), o desde una URL arbitraria. Muy útil para bifurcar gemas y piratearlas en múltiples máquinas y tal.

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

p.ej

gem specific_install https://github.com/githubsvnclone/rdoc.git 
Kamek
fuente
3
¿podría agregar más explicaciones sobre la specific_installgema?
microspino
1
Esto es exactamente lo que estaba buscando, similar al soporte de pip git de Python. gem especifico_install -l <url para proyectar en github> funcionó de maravilla!
Murph
1
ERROR: While executing gem ... (NoMethodError) undefined method 'build' for Gem::Package:Module Suena genial, pero no lo investigaré más a fondo. Solo quería publicar que no funcionó para mí en caso de que alguien más esté a punto de darle un giro basado en la recomendación de SO.
isomorphismes
1
@isomorphismes +1 a tu comentario. Creé una pregunta separada sobre ese error aquí: stackoverflow.com/questions/27045874/…
La-comadreja
1
¡Esto es un salvavidas! Gracias Señor.
Noldorin
34

Bundler te permite usar gemas directamente desde repositorios git. En tu 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'

Para obtener más información, consulte https://bundler.io/v2.0/guides/git.html

Dennis
fuente
probablemente la mejor respuesta
Anton Semenichenko
Tenga en cuenta que podría tener problemas si utiliza este enfoque con el pasajero y apache / ngix. Cuando se ejecuta bundle, tales dependencias de git-gem- no se instalarán globalmente, sino en el directorio de inicio del usuario actual. Passenger ejecutará ruby ​​como usuario de su servidor web (por ejemplo www-data) que no tiene acceso a este directorio y, por lo tanto, este "git-gem" no se cargará. Obtendrás un error ... is not yet checked out. Run bundle install first.
espina de pescado
16

OBSOLETO (ver comentarios)

Si el proyecto es de github y está incluido en la lista en http://gems.github.com/list.html , puede agregar el repositorio de github a las fuentes de gemas para instalarlo:

$ gem sources -a http://gems.github.com
$ sudo gem install username-projectname
Michael Pereira
fuente
1
o rly? acabo de hacer esto y sí funcionó ... vaya a gems.github.com antes de agregarlo a sus fuentes, supongo. (pero no uses sudo)
esharp
77
@esharp, alojan los que construyeron, pero ya no los construyen. Si la gema se actualizó desde 2009 , una copia de gems.github.com quedará obsoleta.
Tobu
13

Si obtiene sus gemas de un repositorio público de GitHub, puede usar la abreviatura

gem 'nokogiri', github: 'tenderlove/nokogiri'
Rajeev Kannav Sharma
fuente
4

También puedes hacer gem install username-projectname -s http://gems.github.com

Chuck Vose
fuente
66
Obsoleto, vea los comentarios de la otra respuesta.
Lee Hambley
1
Todavía me ayudó por un problema con una antigua base de código. Sí, es 2013 y estoy trabajando en un proyecto de rails 2.3.4.
Vivek Sampara
4

En su Gemfile, agregue lo siguiente:

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

También puede agregar opciones de referencia, ramificación y etiqueta,

Por ejemplo, si desea descargar desde una rama en particular:

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

Entonces corre:

bundle install
slal
fuente
3

Si instala utilizando bundler como lo sugiere gryzzly y la gema crea un binario, asegúrese de ejecutarlo ya bundle exec mygembinaryque la gema se almacena en un directorio de paquete que no es visible en la ruta normal de la gema.

Mark Cheverton
fuente
2

En una máquina Linux nueva también necesita instalar git. Bundle lo usa detrás de escena.

usuario1208639
fuente