2010-12-20 13 views

Respuesta

442

Creo que se puede hacer esto:

gem "foo", :path => "/path/to/foo" 
+8

Un camino codificado está bien para una sesión de hack rápida, pero la solución de gema local de bloudermilk es más efectiva para proyectos bajo control de versión. Te permite seguir revisando los dos proyectos (gema y proyecto usando la gema) para que otros no tengan que verificar la fuente de la gema o compartir los mismos caminos. – mahemoff

+3

Puede hacer esto ligeramente más limpio usando un enlace simbólico .gignorado a su gema local en el directorio del proyecto: de esta forma puede usar el control de fuente en ambos proyectos por separado y otros pueden hacer lo mismo sin tener una estructura de directorio idéntica. – Dan

+4

Algo a lo que tener cuidado podría ser Spring. Si está utilizando una ruta local para su gema, podría notar versiones en caché de su gema local como lo hice en la consola de rieles. Si no parece que se están recogiendo los cambios de gemas locales, intente 'spring stop' para ver si realmente es el problema. –

192

Además de especificar la ruta de acceso (como Jimmy mencionado) también se puede forzar Bündler usar una joya local para su entorno sólo se utilizando la siguiente configuración opción:

$ bundle config local.GEM_NAME /path/to/local/git/repository 

Esto es extremadamente útil si está desarrollando dos gemas o una joya y un rieles de lado a lado de aplicación.

Nota sin embargo, que esto sólo funciona cuando ya se está utilizando git para su dependencia, por ejemplo:

# In Gemfile 
gem 'rack', :github => 'rack/rack', :branch => 'master' 

# In your terminal 
$ bundle config local.rack ~/Work/git/rack 

según lo visto en the docs.

+0

Tengo problemas con esto porque estoy usando 'BUNDLE_PATH' (compilando un paquete para su distribución). Al hacer lo que sugirió, o la respuesta de Jimmy, solo hace un 'uso', y no lo instala en mi carpeta' BUNDLE_PATH'. No pude resolver esto, ¿alguna ayuda? – Automatico

+2

Tenga en cuenta que esto no funcionará con ** gemspec **, por discusión [aquí] (https://github.com/bundler/bundler/issues/2911). – dukedave

+20

Para deshabilitar la anulación local: 'bundle config --delete local.GEM_NAME' – alxndr

25

También puede hacer referencia a una gema local con git si está trabajando en ello.

gem 'foo', 
    :git => '/Path/to/local/git/repo', 
    :branch => 'my-feature-branch' 

Entonces, si cambia corro

bundle exec gem uninstall foo 
bundle update foo 

pero no estoy seguro de todo el mundo necesita para hacer funcionar estos dos pasos.

+0

esto es genial, pero no es tan conveniente si estás desarrollando activamente la gema ... porque necesitarás comprometer cada cambio & ' paquete de desinstalación && paquete de instalación ', por cada cambio que desee reflejado en su aplicación – Ramses

15

Para utilizar repositorio joya local en un proyecto de rieles, siga los siguientes pasos:

  1. Comprobar si la carpeta joya es un repositorio git (el comando se ejecuta en la carpeta joya)

    git rev-parse --is-inside-work-tree 
    
  2. Obtener ruta del repositorio (el comando se ejecuta en la carpeta joya)

    git rev-parse --show-toplevel 
    
  3. La creación de una anulación local para la aplicación rieles

    bundle config local.GEM_NAME /path/to/local/git/repository 
    

    donde GEM_NAME es el nombre de su joya y /path/to/local/git/repository es el resultado del comando en el punto 2

  4. En su aplicación Gemfile añadir la siguiente línea :

    gem 'GEM_NAME', :github => 'GEM_NAME/GEM_NAME', :branch => 'master' 
    
  5. Correr bundle install debe dar algo como esto:

    Using GEM_NAME (0.0.1) from git://github.com/GEM_NAME/GEM_NAME.git (at /path/to/local/git/repository) 
    

    donde GEM_NAME es el nombre de su joya y /path/to/local/git/repository desde el punto 2

  6. Por último, ejecute bundle list, no gem list y debería ver algo como esto:

    GEM_NAME (0.0.1 5a68b88) 
    

    donde GEM_NAME es el nombre de su gema


Unos pocos casos importantes que estoy observando usando:

Rails 4.0.2 
ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux] 
Ubuntu 13.10 
RubyMine 6.0.3 
  • Parece RubyMine no está mostrando joyas locales como una biblioteca externa. Más información sobre el error se puede encontrar here y here
  • Cuando voy a cambiar algo en la joya local, con el fin de ser cargado en la aplicación de los carriles que debería stop/start el servidor rieles
  • Si estoy cambiando el version de la gema, stopping/starting el servidor Rails me da un error. Con el fin de solucionarlo, yo estoy especificando la versión joya en la aplicación rieles Gemfile así:

    gem 'GEM_NAME', '0.0.2', :github => 'GEM_NAME/GEM_NAME', :branch => 'master' 
    
-2

Si desea que la rama demasiado:

gem 'foo', path: "point/to/your/path", branch: "branch-name" 
0

puede hacer referencia a las gemas con la fuente : source: 'https://source.com', git repository (:github => 'git/url') y con la ruta local :path => '.../path/gem_name'.
Puede obtener más información sobre Gemfiles and how to use them en este artículo.

Cuestiones relacionadas