Como instalar a gem do código-fonte do GitHub?

451

Gostaria de instalar o gem da última fonte do GitHub.

Como eu faço isso?

Vojto
fonte

Respostas:

332

Caso esteja usando o bundler, você precisa adicionar algo assim ao seu Gemfile:

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

E, no caso de haver um .gemspecarquivo, ele deverá conseguir buscar e instalar a gema durante a execução bundle install.

UPD. Conforme indicado nos comentários, para o Bundler funcionar corretamente, você também precisa adicionar o seguinte a config.ru:

require "bundler" 
Bundler.setup(:default)
Misha Reyzlin
fonte
9
Eu também precisava para adicionar a seguinte (adicionado à minha config.ru): require "bundler" Bundler.setup(:default)Veja docs bundler para mais detalhes
Louis Sayers
40
Além disso pode-se especificar referência, ramo ou etiqueta opções por exemplogem 'redcarpet', :git => 'git://github.com/tanoku/redcarpet.git', :branch => 'yourbranch'
Amit Patel
25
há também: gem 'redcarpet', github: 'tanoku/redcarpet'. akash.im/2012/06/05/bundler-new-github-option.html
Andrew
@AmitPatel Muito obrigado !!! : branch => 'yourbranch', sua linha resolveu um grande problema para mim agora. Muito grato a você.
KM Rakibul Islam
3
@gaussblurinc gem 'redcarpet', :git => 'git://github.com/tanoku/redcarpet.git', :tag => 'v2.3.5'<- a :tag => ''parte
Misha Reyzlin
400

bem, isso depende do projeto em questão. Alguns projetos têm um arquivo * .gemspec em seu diretório raiz. Nesse caso, seria

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

Outros projetos têm uma tarefa de rake, chamada "gem" ou "build" ou algo parecido, nesse caso, você precisa chamar "rake", mas isso depende do projeto.

Nos dois casos, você deve baixar a fonte.

Dominik Honnef
fonte
2
Obrigado - resposta perfeita.
Jon Schoning
20
Apenas uma dica para que as pessoas saibam o que realmente está acontecendo. O gemname-version.gemarquivo é criado ao invocargem build
Waiting for Dev ...
Onde o gem install gemname-version.gemcomando instala o gem git localmente? Não consigo encontrar em nenhum lugar da máquina local uma gema de mecanismo instalada dessa maneira. Onde o bundler o oculta?
Verde
2
Eu acho que a gem install gemname-version.gemlinha deve sergem install --local gemname-version.gem
JonB
@ Green - gem which gemnamedeve dizer onde está uma jóia específica, isso não funciona para você?
Sameers
255

Experimente a jóia specific_install que permite instalar uma jóia a partir do repositório do github (como 'edge') ou de um URL arbitrário. Muito útil para bifurcar gemas e hackear nelas em várias máquinas e tal.

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

por exemplo

gem specific_install https://github.com/githubsvnclone/rdoc.git 
Kamek
fonte
3
você poderia adicionar mais explicações sobre a specific_installgema?
Microspino
1
Isso é exatamente o que eu estava procurando, semelhante ao suporte ao pip git do Python. gem specific_install -l <url para projetar no github> funcionou como um encanto!
19412 Murph
1
ERROR: While executing gem ... (NoMethodError) undefined method 'build' for Gem::Package:Module Parece muito legal, mas eu não irei investigar mais. Só queria postar que não funcionou para mim no caso de alguém estar prestes a dar um giro com base na recomendação do SO.
Isomorphismes
1
@isomorphismes +1 no seu comentário. Eu criei uma pergunta separada sobre esse erro aqui: stackoverflow.com/questions/27045874/…
La-comadreja
1
Este é um salva-vidas! Obrigado senhor.
Noldorin
34

O Bundler permite que você use gems diretamente de repositórios git. No seu 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 mais informações, consulte https://bundler.io/v2.0/guides/git.html

Dennis
fonte
provavelmente a melhor resposta
Anton Semenichenko 30/03
Observe que você poderá ter problemas se usar essa abordagem com o passageiro e o apache / ngix. Durante a execução bundle, essas dependências do git-gem- não serão instaladas globalmente, mas no diretório inicial do usuário atual. O passageiro executará o ruby ​​como usuário do seu servidor da web (por exemplo www-data), que não tem acesso a esse diretório e, portanto, esse "git-gem" não será carregado. Você receberá um erro ... is not yet checked out. Run bundle install first.
em espinha
16

OBSOLETO (ver comentários)

Se o projeto é do github, e está contido na lista em http://gems.github.com/list.html , você pode adicionar o repositório do github às fontes do gems para instalá-lo:

$ gem sources -a http://gems.github.com
$ sudo gem install username-projectname
Michael Pereira
fonte
1
oly? Acabei de fazer isso e funcionou ... vá para gems.github.com antes de adicioná-lo às fontes do ano, eu acho? (mas não use sudo)
esharp
7
@esharp, eles hospedam os que construíram, mas não os constroem mais. Se a gema for atualizada desde 2009 , uma cópia do gems.github.com ficará obsoleta.
Tobu
13

Se você estiver obtendo suas jóias de um repositório público do GitHub, poderá usar a abreviação

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

Você também pode fazer gem install username-projectname -s http://gems.github.com

Chuck Vose
fonte
6
Obsoleto, veja os comentários da outra resposta.
Lee Hambley
1
Ainda me ajudou em um problema com uma base de código antiga. Sim, é 2013 e estou trabalhando em um projeto de trilhos 2.3.4.
Vivek Sampara
4

No seu Gemfile, adicione o seguinte:

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

Você também pode adicionar opções de ref, branch e tag,

Por exemplo, se você deseja fazer o download de uma ramificação específica:

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

Então corra:

bundle install
slal
fonte
3

Se você instalar usando o bundler, conforme sugerido pelo gryzzly, e o gem criar um binário, certifique-se de executá-lo, bundle exec mygembinarypois o gem é armazenado em um diretório do bundler que não é visível no caminho normal do gem.

Mark Cheverton
fonte
2

Em uma nova máquina Linux, você também precisa instalar git. Bundle usa nos bastidores.

user1208639
fonte