ruby - salen - desempaquetar/congelar gemas en una aplicación de rubíes sin rieles
rubi mineral (1)
Estoy escribiendo una aplicación de rubí que no es de Rails (¡jadeó!) Y me gustaría poder incluir todas las dependencias de gemas que requiere la aplicación en un subdirectorio de proveedor. Esto sería similar a cómo funciona http://gemsonrails.rubyforge.org/ para las aplicaciones de Rails.
El objetivo aquí es evitar la situación que mi equipo experimenta actualmente cuando se agrega una nueva dependencia. Cada desarrollador de mi equipo tiene que instalar la gema manualmente, y luego alguien tiene que actualizar manualmente cada prueba y máquina de producción y puesta en escena. Si podemos congelar las dependencias en la aplicación distribuida, entonces una simple actualización svn (o git pull para esos hipsters en la multitud) sería todo lo que se necesita.
ACTUALIZACIÓN (Nueva solución):
Prueba la nueva gema de bundler de Yehuda Katz. gem install bundler
luego crea un Gemfile
con todas tus dependencias. Ver la documentación para más información.
Antigua recomendación:
Una manera fácil es simplemente desempaquetar manualmente las gemas en su directorio de vendor
y agregar la ruta de acceso de las gemas desempaquetadas al frente de $ LOAD_PATH.
Para desempacar una gema:
$ cd vendor/gems
$ gem unpack active_support
Unpacked gem: ''/path/to/myproject/vendor/gems/activesupport-2.3.2''
Solo asegúrate de desempaquetar todas las gemas necesarias y sus dependencias (usando las versiones correctas).
Para agregar todas las gemas en el proveedor / gemas a su $ LOAD_PATH, intente agregar algo como esto a la inicialización de su aplicación:
Dir.glob(File.join("vendor", "gems", "*", "lib")).each do |lib|
$LOAD_PATH.unshift(File.expand_path(lib))
end
Actualización: Sarah (en los comentarios) me convenció de que también podría ser necesario anular GEM_PATH. Aquí hay una manera de hacerlo:
require ''rubygems''
gem_paths = [File.expand_path(File.join("vendor", "gems")), Gem.default_dir]
Gem.clear_paths
Gem.send :set_paths, gem_paths.join(":")
Otra opción es buscar en Rip (Empaquetado Inteligente de Ruby) para administrar sus dependencias. Rip se ve muy dulce, pero aún es nuevo.