2012-02-20 13 views
6

Nuestro grupo tiene varias personas, cualquiera de las cuales puede estar trabajando en cualquier combinación de gemas. En la actualidad, nuestra Gemfile tiene cosas como esta:Gemfile: una mejor forma de declarar condicionalmente las gemas locales o remotas para múltiples desarrolladores

gem 'awesome-gem', :git => '[email protected]:somebody/awesome-gem.git' 
# gem 'awesome-gem', :path => '/Users/developer-A/workspace/awesome-gem' 

# gem 'rad-gem', :git => '[email protected]:somebody/rad-gem.git', :branch => 'release' 
gem 'rad-gem', :path => '/some/path/specific-to/developer-B/rad-gem' 

Así desarrollador-A estaba trabajando en impresionante-joya localmente, y cuando terminaron arriba, que acaba de reemplazar sus: el camino de la gema: ubicación Git y compromete tanto a la versión controlar. developer-B y C hacen lo mismo para rad-gem, cada uno tiene una ruta diferente en su Gemfile modificado localmente y si cada uno de Gemfile tiene cambios reales, tienen que deshacer su configuración local: path, commit, undo to point back a su versión local del rad-joya, etc.

esto es a la vez un dolor y feo, así que trataron de llegar a una solución mejor, pero lo mejor que podía llegar a decir algo como esto:

if ENV['RADGEM_PATH'] 
    gem 'rad-gem', :path => ENV['RADGEM_PATH'] 
else 
    gem 'rad-gem', :git => '[email protected]:somebody/rad-gem.git', :branch => 'release' 
end 

Esto permite al desarrollador B y C establecer su propia ruta de rad-gem mientras elimina gran parte del dolor mencionado anteriormente. sin embargo, sigue siendo feo y me pregunto si hay una mejor manera de hacerlo, posiblemente utilizando grupos.

Respuesta

8

Update (actual)

Una reciente actualización a bunder ahora ofrece local git repos. Esta es la forma actual de resolver este problema. Gracias sekrett

Update (obsoleta)

Si tiene Bündler> = 1.2, ahora hay una better way to do this. Por ejemplo,

bundle config local.blog ~/Work/gems/blog 

respuesta original (obsoleta)

Un amigo mío en el equipo central rspec me mostraron the approach they used in the rspec-core Gemfile, así que supongo que voy a utilizar.

+0

URL para la documentación ahora es http://gembundler.com/v1.2/man/bundle-config.1.html#LOCAL-GIT-REPOS – cbliard

+0

Ahora está aquí: http://bundler.io/v1 .2/man/bundle-config.1.html # LOCAL-GIT-REPOS – sekrett

0

¿No podría tener también un Gemfile dinámico que en desarrollo utiliza un archivo oculto (.my_local_gems) para la ubicación de las gemas en la máquina de ese usuario? ¿O podrías usar alguna variable de entorno para una variable como GEMS_DEVEL_HOME?

De cualquier manera, obligaría a todos a mantener todas sus gemas locales al día y en la producción o puesta en escena, el Gemfile normal entraría en vigor.

Recuerde, el Gemfile es solo ruby, por lo que puede incluir todo tipo de código, no solo modismos específicos del bundler.

Cuestiones relacionadas