2011-06-12 11 views
18

Estoy ayudando en el desarrollo de una serie de gemas interrelacionadas. Como tal, no quiero que tengan una dependencia fuerte el uno del otro, pero yo do quiero que ejecuten pruebas en desarrollo que se usen entre sí. Simple ¿verdad? Simplemente use add_development_dependency en gemspec, ¿verdad? Bueno, hay una pequeña arruga: el repositorio de git contiene todas las gemas, por lo que quiero que el Gemfile apunte a la copia local de la gema. Esto funciona con una dependencia dura. En el gemspec, tengo esta línea para mi dependencia estricta:Gema y paquete: Agregar una dependencia de desarrollo con una ruta relativa

s.add_dependency "mygem-core" 

Y luego en el Gemfile, tengo esta línea:

gem "mygem-core", :path => "../mygem-core" 

Esto funciona perfecto. La dependencia existe para cuando saco este paquete, y cuando estoy probando, usará la copia local de mygem-core. El problema es que cuando pongo esto en el gemspec:

s.add_development_dependency "mygem-runtime" 

Y entonces esta en el Gemfile:

gem "mygem-runtime", :path => "../mygem-runtime" 

Entonces me sale un error cuando corro paquete:

You cannot specify the same gem twice coming from different sources. You specified that mygem-packager (>= 0) should come from source at ../mygem-packager and 

Sí, eso no es un error tipográfico al final. Literalmente hay un espacio en blanco y vacío al final para la segunda 'ubicación'. ¿Hay alguna manera inteligente de evitar esto? Quiero agregar esto como una dependencia de desarrollo, y usar la fuente local. ¿Qué me estoy perdiendo?

Respuesta

9

Es probablemente mejor que deje que la joya de la .gemspec manifiesto y lo pone en el Gemfile bajo la : grupo de desarrollo.

# Gemfile 
source :rubygems 
gemspec 

gem "mygem-runtime", :path => '../mygem-runtime', :group => :development 
1

Si usa Gemfile para especificar una ruta local a una gema, tendrá que eliminarla de gemspec. Bundler analizará gemspec y agregará las dependencias que ese bundler está instalando, por lo que es como tener la gema especificada dos veces.

Cuestiones relacionadas