2010-12-14 13 views
19

Escenario: Estoy desarrollando una gema gem-foo, usando Bundler. Tengo una dependencia en gem-bar, que he comprobado localmente para el desarrollo. Puedo declarar esta dependencia en el Gemfile como:¿Cómo puedo usar la regla "gemspec" en Bundler, mientras sigo usando el pago local de una gema?

gem "gem-bar", :path => "/path/to/local/gem-bar" 

Sin embargo, al desarrollar una joya de la "mejor práctica" parece ser la de definir las gemas requeridas en el gem-foo.gemspec a través de:

s.add_runtime_dependency 'gem-bar' 

y luego basta con incluir las dependencias en el Gemfile usando:

gemspec 

lo que me gustaría hacer es añadir la dependencia de tiempo de ejecución en la gema en el gemspec, pero haga algunas modificaciones locales en gem-bar y tenga un bundle install use el pago del desarrollo local. Supongamos el caso en el que controlo ambas gemas, y las estoy pirateando de forma concurrente, y presionaré las nuevas versiones simultáneamente. I podría solo comentar el s.add_runtime_dependency en gemspec y agregarlo con la ruta local en el Gemfile, pero eso parece ... propenso a errores? El gemspec debe declarar siempre esta dependencia, y el Gemfile debe poder anular la ubicación que Bundler debería usar para la gema. Sin embargo, si en realidad se hace esto, se obtiene el siguiente error:

You cannot specify the same gem twice coming from different sources. You specified that gem-bar (>= 0) should come from an unspecfied source and source at /path/to/local/gem-bar

Idealmente, me gustaría simplemente tienen algún tipo de anulación local, ya que nunca quiero el caso de que accidentalmente me empujo la gema con el requisito de un local gem-bar en una ruta específica. Eso sería tonto.

¿Alguien tiene una buena solución para este caso de uso?

Respuesta

15

Algunas personas han encontrado este problema, Yehuda Katz ha dicho que aceptaría felizmente un parche: http://groups.google.com/group/ruby-bundler/browse_thread/thread/d4215c4930a63ffc?pli=1

Como la mejor solución, comente la línea gemspec en su Gemfile y sufrir alguna duplicación?

Actualización:

Parece que usted no tiene que esperar - https://github.com/carlhuda/bundler/commit/03378109d

El mensaje de confirmación: "Que sea posible reemplazar la fuente de una dependencia .gemspec en el Gemfile"

¡hurra!

2

Por ahora, lo que he hecho es deshabilitar los requisitos de gemas en gemspec cuando se establece una variable de entorno dada, luego en el Gemfile, agrego una definición gema que apunta a mi sistema de archivos local.

Escribí sobre todo mi flujo de trabajo aquí: http://numbers.brighterplanet.com/2010/07/28/bundler-to-the-max/ Nota: También uso joyero, lo que complica mucho las cosas.

1

¡Chico! Nunca llego a estos a tiempo ¿verdad? Prueba las opciones de Bundler como - vendedor de algo que no recuerdo.

+0

Para instalar en "proveedor/paquete", haga 'paquete install --path vendor/bundle'. Una vez que está instalado allí, y tienes un Gemfile.lock, también puede usar 'bundle install --deployment' para entornos que no sean de desarrollo. – Brett

+0

¡Está bien! Eso es lo que recuerdo. Gracias. Estaba cansado cuando lo publiqué y solo lo usé unas cuantas veces. Solo estoy investigando a rbenv estos días. Parece ser bastante directo. Yehuda Katz escribió algunas cosas bastante buenas sobre qué camino tomar con este tema. Las mejores prácticas como el desarrollo de gemas y todo. –

Cuestiones relacionadas