Esta não é estritamente uma resposta à sua pergunta sobre a instalação de .gempacotes, mas você pode especificar todos os tipos de locais gem a gem editando seu Gemfile .
A especificação de um :pathatributo instalará a gema desse caminho na sua máquina local.
gem "foreman", path:"/Users/pje/my_foreman_fork"
Como alternativa, especificar um :gitatributo instalará a gem a partir de um repositório git remoto.
gem "foreman", git:"git://github.com/pje/foreman.git"# ...or at a specific SHA-1 ref
gem "foreman", git:"git://github.com/pje/foreman.git", ref:"bf648a070c"# ...or branch
gem "foreman", git:"git://github.com/pje/foreman.git", branch:"jruby"# ...or tag
gem "foreman", git:"git://github.com/pje/foreman.git", tag:"v0.45.0"
Também para alguns firewalls, o protocolo git pode ser um problema. Nesse caso, tentegem "foreman", :git => "https://github.com/pje/foreman.git"
kode 11/12/13
60
Parece que o empacotador não pode usar arquivos .gem imediatamente. Apontar o caminho: para um diretório que contém arquivos .gem não funciona. Algumas pessoas sugeriram configurar um servidor de gem local (geminabox, stickler) para esse fim.
No entanto, o que eu achei muito mais simples é usar um servidor "gem" local do sistema de arquivos: basta colocar seus arquivos .gem em um diretório local e, em seguida, usar "gem generate_index" para torná-lo um repositório Gem
Obrigado! Além disso, eu precisava de uma terceira barra para fazer "file: /// Absolute / Path / to / repo"
Anna
5
Não seria mais fácil executar o "gem server" na linha de comando e adicionar a fonte " localhost: 8808 " ao seu Gemfile
Anna
Isso é muito legal, Martin! Obrigado por compartilhar, é exatamente o que eu estava procurando, pois não queria depender da execução de um gem servernem queria hospedar todo o projeto, apenas o arquivo .gem.
Leo Gallucci
6
Dica de bônus: você pode contornar o requisito de caminho absoluto usando File.expand_path como estesource "file://#{File.expand_path('.')}/chef-11.10.0.dev.2"
Leo Gallucci
Não funciona para mim. Mac OS X. Bundler v1.11.2:Could not fetch specs from file://Users/nakilon/....../
Nakilon
43
Eu descompactaria sua gema na pasta do fornecedor do aplicativo
Verdade. mas o que se eu não tiver instalado antes (quando estou implementando em um servidor) Não foi possível encontrar Imlib2-Rubi-0.5.2 em qualquer uma das fontes de comando acabado?
ddayan
184
você pode apontar para um diretório local com gema "gemname",: path => "~ / some / / local caminho"
JHurrah
5
Eu acho que: path requer a pasta gem com o arquivo gemspec. Eu só tenho arquivos .gem que desejo instalar.
ddayan
1
Ok, então o deploy do cap passou, mas a gema não foi instalada "Não existe esse arquivo para carregar - vips": /
ddayan 13/04/11
4
Definitivamente, isso não é verdade, pelo menos por mais tempo. O Bundler não olha para as gemas do seu sistema e apenas passa pelo que está no Gemfile. Uma das razões é tão terrível.
bioneuralnet
6
Você pode forçar o bundler a usar as gems implantadas usando "bundle package" e "bundle install --local"
Na sua máquina de desenvolvimento:
bundle install
(Instala gemas necessárias e cria Gemfile.lock)
bundle package
(Armazena em cache as gemas no fornecedor / cache)
No servidor:
bundle install --local
(--local significa "use as gemas do fornecedor / cache")
E se eu não conseguir instalar nada no servidor? Nesse caso, eu preciso criar com rake, mas o servidor não tem uma gema que eu uso na construção; mas não tenho nenhum problema ao verificar as dependências.
Henrik
"bundle install" não funcionou para mim se a jóia não foi incluído na minha fonte existente Gemfile".
Anna
Basta remover o arquivo gem formar temporariamente o arquivo gem antes de fazer bundle installDepois disso, copie o Gemfile ao fornecedor / cache , adicione a volta gem ao Gemfile e executar bundle install --local
bert bruynooghe
1
bundle packageé uma ótima sugestão, mesmo agora, três anos depois. Se a sua versão do Bundler for anterior a 2.0 (ainda não lançada até o momento), você precisará usá- bundle package --alllo se desejar incluir gemas com pathou gitdependências. Ele fornecerá um lembrete útil se detectar tais dependências.
precisa
1
FYI: isso pode não funcionar tão bem quanto você esperaria se desenvolvesse em uma plataforma diferente da que implementa (por exemplo, desenvolva no macOS, implante no Linux). De acordo com a --localdocumentação: "Observe que, se uma jóia específica da plataforma apropriada existir no rubygems.org, ela não será encontrada."
Liam Dawson
1
Adicionando .gema vendor/cacheparece trabalho. Nenhuma opção é necessária no Gemfile.
Respostas:
Esta não é estritamente uma resposta à sua pergunta sobre a instalação de
.gem
pacotes, mas você pode especificar todos os tipos de locais gem a gem editando seu Gemfile .A especificação de um
:path
atributo instalará a gema desse caminho na sua máquina local.Como alternativa, especificar um
:git
atributo instalará a gem a partir de um repositório git remoto.(Como @JHurrah mencionou em seu comentário .)
fonte
gem "foreman", :git => "https://github.com/pje/foreman.git"
Parece que o empacotador não pode usar arquivos .gem imediatamente. Apontar o caminho: para um diretório que contém arquivos .gem não funciona. Algumas pessoas sugeriram configurar um servidor de gem local (geminabox, stickler) para esse fim.
No entanto, o que eu achei muito mais simples é usar um servidor "gem" local do sistema de arquivos: basta colocar seus arquivos .gem em um diretório local e, em seguida, usar "gem generate_index" para torná-lo um repositório Gem
Finalmente, aponte o bundler para esse local adicionando a seguinte linha ao seu Gemfile
Se você atualizar as gemas no repositório, certifique-se de gerar novamente o índice.
fonte
gem server
nem queria hospedar todo o projeto, apenas o arquivo .gem.source "file://#{File.expand_path('.')}/chef-11.10.0.dev.2"
Could not fetch specs from file://Users/nakilon/....../
Eu descompactaria sua gema na pasta do fornecedor do aplicativo
Em seguida, adicione o caminho no Gemfile para vincular a gema não compactada.
fonte
Por padrão, o Bundler verifica primeiro o seu sistema e, se não conseguir encontrar uma jóia, utilizará as fontes especificadas no seu Gemfile.
fonte
Você pode forçar o bundler a usar as gems implantadas usando "bundle package" e "bundle install --local"
Na sua máquina de desenvolvimento:
(Instala gemas necessárias e cria Gemfile.lock)
(Armazena em cache as gemas no fornecedor / cache)
No servidor:
(--local significa "use as gemas do fornecedor / cache")
fonte
bundle install
Depois disso, copie o Gemfile ao fornecedor / cache , adicione a volta gem ao Gemfile e executarbundle install --local
bundle package
é uma ótima sugestão, mesmo agora, três anos depois. Se a sua versão do Bundler for anterior a 2.0 (ainda não lançada até o momento), você precisará usá-bundle package --all
lo se desejar incluir gemas compath
ougit
dependências. Ele fornecerá um lembrete útil se detectar tais dependências.--local
documentação: "Observe que, se uma jóia específica da plataforma apropriada existir no rubygems.org, ela não será encontrada."Adicionando
.gem
avendor/cache
parece trabalho. Nenhuma opção é necessária noGemfile
.fonte
Achei mais fácil executar meu próprio servidor gem usando
geminabox
Veja estas instruções simples .
fonte