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?

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)

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.


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 

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: '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 mais informações, consulte https://bundler.io/v2.0/guides/git.html


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

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'

4

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


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

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.


2

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.