ruby - from - ¿Cómo puedo usar la regla "gemspec" en Bundler, mientras sigo usando el pago local de una gema?
bundler traduccion (3)
Escenario: estoy desarrollando una joya 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:
gem "gem-bar", :path => "/path/to/local/gem-bar"
Sin embargo, al desarrollar una gema, la "mejor práctica" parece ser definir las gemas necesarias en la gem-foo.gemspec
través de:
s.add_runtime_dependency ''gem-bar''
y luego simplemente incluya las dependencias en el Gemfile
usando:
gemspec
Lo que me gustaría hacer es agregar la dependencia del tiempo de ejecución en la gema en el gemspec, pero hacer algunas modificaciones locales en gem-bar
y tener una bundle install
usar el pago de 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. Podría comentar la s.add_runtime_dependency
en gemspec y agregarla con la ruta local en el Gemfile, pero eso parece ... ¿propenso a errores? El gemspec siempre debe declarar esta dependencia, y el Gemfile debe poder anular la ubicación que Bundler debería usar para la gema. Sin embargo, si realmente hace esto, obtendrá el siguiente error:
No puede especificar la misma gema dos veces provenientes de diferentes fuentes. Has especificado que la barra de gemas (> = 0) debe provenir de una fuente no especificada y fuente en / ruta / a / local / barra de gemas
Idealmente, solo tendría algún tipo de anulación local, ya que nunca quiero el caso en el que empuje accidentalmente la gema con el requisito de una gem-bar
local en una ruta específica. Eso sería tonto.
¿Alguien tiene una buena solución para este caso de uso?
¡Chico! Nunca llego a estos a tiempo ¿verdad? Prueba las opciones de Bundler como - vendedor de algo que no recuerdo.
Algunas personas han encontrado este problema, Yehuda Katz ha dicho que felizmente aceptaría 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 sufra alguna duplicación.
Actualizar:
Parece que no tienes que esperar - https://github.com/carlhuda/bundler/commit/03378109d
El mensaje de confirmación: "Permitir anular la fuente de una dependencia .gemspec en el Gemfile"
¡hurra!
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 de 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.