2011-12-19 16 views
10

Ho un sacco di gemme sul mio computer che voglio usare in una ricetta da chef.È possibile raggruppare/installare gemme da una cache locale?

So che è possibile metterli in una directory come/tmp/gemme e basta:

cd /tmp/gems 
gem install *.gem 

E 'possibile mettere tutte le gemme in una directory dove posso installare con bundler senza scaricarli ancora?

cd /somedir/my_rails_project 
bundle 

Voglio risparmiare larghezza di banda.

risposta

4

È possibile aggiungere directory locali al vostro Gemfile (ad esempio dalla documentazione):

gem "nokogiri", :path => "~/sw/gems/nokogiri" 

In alternativa, è possibile impostare un repository Git locale con le gemme in essa e scrivere un Gemfile come questo:

gem "gem1", :git => "file:///tmp/gems", 
      :branch => "gem1" 
+0

Quella è una soluzione, ma sarebbe meglio se è trasparente (Nessuna modifica in il mio Gemfile). – ayckoster

+0

Puoi scrivere script per installare gemme (con gem install) dalla tua cache. – avy

+0

@avy: l'ho fatto esattamente. – ayckoster

24

bundle install --local dovrebbe essere quello che vuoi. Dal bundle-install manpage:

 
--local 
    Do not attempt to connect to rubygems.org, instead using just the 
    gems located in vendor/cache. Note that if a more appropriate 
    platform-specific gem exists on rubygems.org, this will bypass 
    the normal lookup. 
+0

E se la distribuzione (con capistrano o simili) usa --deployment e assicurati di collegare un link simbolico tra vendor/bundle a shared/vendor_bundle o simile (come menzionato in http://bundler.io/v1.5/deploying.html) –

2

Usa

bundle package 

Serrature e quindi memorizza nella cache le gemme in ./vendor/cache.

Il comando del pacchetto copierà i file .gem per le gemme nel gruppo in ./vendor/cache. In seguito, quando si esegue l'installazione del pacchetto, Bundler utilizzerà le gemme nella cache in preferenza a quelle su rubygems.org.

http://bundler.io/v1.6/bundle_package.html

0

Se si desidera utilizzare una cache locale al fine di accelerare il bundle install CI, ad esempio quando un contenitore finestra mobile viene utilizzato per eseguire i test, è possibile utilizzare --path. Questo userà gemme nel percorso specificato a meno che non siano presenti, altrimenti le scaricherà in quella posizione.

Ciò presuppone che la build CI possa montare un volume persistente all'interno del contenitore docker. Così, per esempio, se la macchina CI ha una directory /var/cache/drone che può essere montato nel contenitore finestra mobile come ./cache allora si può fare:

bundle install --without=development --quiet --path=cache 
Problemi correlati