¿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?

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)

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.


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 

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: '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'

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


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

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'

4

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


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

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.


2

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.