2011-12-19 17 views
10

Tengo un montón de gemas en mi computadora que quiero usar en una receta de chef.¿Es posible agrupar/instalar gemas desde un caché local?

Sé que es posible ponerlos en un directorio como/tmp/gemas y simplemente:

cd /tmp/gems 
gem install *.gem 

¿Es posible poner todas las gemas en un directorio en el que puedo instalarlos con bundler sin descargarlos ¿de nuevo?

cd /somedir/my_rails_project 
bundle 

Quiero ahorrar ancho de banda.

Respuesta

4

Puede agregar directorios locales a su Gemfile (ejemplo de los documentos):

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

Como alternativa, puede configurar un repositorio Git local con las gemas en ella y escribir una Gemfile así:

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

Esa es una solución, pero sería mejor si es transparente (No hay cambios en mi Gemfile). – ayckoster

+0

Puede escribir la secuencia de comandos para las gemas de instalación (con instalación gem) desde su caché. – avy

+0

@avy: hice exactamente eso. – ayckoster

24

bundle install --local debe ser lo que quieras. Desde la página de manual bundle-install:

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

Y si implementa (con capistrano o similar) use --despliegue y asegúrese de vincular el vendedor/paquete a shared/vendor_bundle o similar (como se menciona en http://bundler.io/v1.5/deploying.html) –

2

Uso

bundle package 

Cerraduras y luego almacena en caché las gemas en ./vendor/cache.

El comando paquete copiará los archivos .gem de sus gemas en el paquete en ./vendor/cache. Después, cuando ejecute la instalación del paquete, Bundler usará las gemas en la memoria caché con preferencia a las que están en rubygems.org.

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

0

Si desea utilizar una caché local con el propósito de acelerar bundle install de CI, por ejemplo, cuando un contenedor cargador de muelle se utiliza para ejecutar las pruebas, se puede usar --path. Esto usará gemas en la ruta dada a menos que no estén presentes, de lo contrario las descargará a esa ubicación.

Esto supone que la construcción de CI puede montar un volumen persistente dentro del contenedor acoplable. Así por ejemplo, si la máquina CI tiene un directorio /var/cache/drone que puede ser montado en el contenedor ventana acoplable como ./cache entonces usted puede hacer:

bundle install --without=development --quiet --path=cache 
Cuestiones relacionadas