2011-09-07 8 views
10

Quiero saber si debo especificar la versión de gema para cada gema que agregue a Gemfile o no. Anteriormente, con algunos de mis proyectos, no especificaba ninguna versión para todas las gemas y bundler se encargó de eso, lo que también funcionó bastante bien.Si especificar versiones de Gem obligatoriamente en el archivo Gemfile o no para la aplicación de raíles

Pero recientemente comencé a trabajar en algunos proyectos que estaban en desarrollo durante los últimos 6 meses. En ese proyecto, muchas de las versiones de gemas se especificaron solo en Gemfile y se ignoró Gemfile.lock. Eso causó muchos dolores de cabeza para finalmente resolver conflictos de versiones y actualizar algunas gemas.

también tiene que saber que es una mala práctica para eliminar Gemfile.lock de control de versión de la aplicación - buen artículo de Yehuda - http://yehudakatz.com/2010/12/16/clarifying-the-roles-of-the-gemspec-and-gemfile/

lo tanto, mi pregunta es debería especificar la versión para todos y cada joya que specifiy en Gemfile o solo especifica el nombre y el paquete se encargará de la versión? ¿Cuál es la mejor práctica para manejar esto?

ACTUALIZACIÓN -

La actualización de esta pregunta para especificar correctamente el problema, como Gemfile sovles muchos problemas :)

PROB 1 - Cada desarrollador debe tener la misma versión de gemas. En realidad, al agregar Gemfile.lock al control de versiones se solucionó este problema. Los desarrolladores solo tienen que preocuparse de que ejecuten 'paquete de instalación'/'paquete' en lugar de 'paquete de actualización' ya que esto también actualizará las versiones.

Problema 2 - Algunas gemas versión, si cambia, código de la aplicación de frenos. En realidad con omniauth, existen este tipo de problemas, ya que las API se cambian de una versión a otra. Y sí, para que la aplicación siga funcionando, las versiones deberán especificarse para estas gemas.

Mi prob. - Entonces, en mi gemfile, como las versiones para A y B están estrictamente especificadas, y como ambas dependen de diferentes versiones de Z, que es la dependencia, ni siquiera puedo ejecutar la instalación del paquete o la actualización del paquete. La única solución fue eliminar versiones y dejar que bundler tome la llamada. Es por eso que tuve preguntas como - Gemfile.version_specification_mandatory? # => verdadero/falso

+0

buena pregunta. ¡Esto también respondió mi curiosidad sobre esto, ya que he estado especificando las versiones de gemas! – fregas

Respuesta

2

Si está utilizando la gema para algo que está disponible solo en una versión específica, debe especificar la versión.

Bundler instala la última versión o utiliza la versión disponible en el sistema si no se especifica ninguna versión. Esto funciona para el desarrollador porque la última versión tiene la función que necesita. Pero si la característica se pierde en las versiones futuras de la misma gema y la versión no se especifica en el Gemfile, todas las instalaciones posteriores de la gema para diferentes personas o máquinas diferentes producirán efectos no deseados.

Me he enfrentado a estos problemas particularmente para las versiones candidatas de lanzamiento de will paginate 3.

+0

en realidad si comparte Gemfile.lock, entonces el problema que mencionó anteriormente no aumentará. Como el desarrollador por primera vez agrega gem y ejecuta 'bundler' esa versión está bloqueada y será utilizada por todos los desarrolladores desde Gemfile.lock. Lo que realmente quiero saber es: como Gemfile.lock está específicamente allí para bloquear la versión, ¿deberíamos especificar las versiones en Gemfile como mandato? – rtdp

6

Creo que es mejor no especificar versiones de gema en el Gemfile. En raras ocasiones, puede ser necesario especificar una versión, por ejemplo, cuando una versión más nueva rompe su aplicación. Pero especificar versiones para todas tus gemas suele ser exagerado. El archivo Gemfile.lock (que no se edita, pero sí se controla el control de la versión) evitará que se utilicen nuevas versiones de gemas en su aplicación hasta que actualice de forma explícita.

+0

Sí, estoy de acuerdo contigo Ruder. También actualizo la pregunta sobre qué es exactamente lo que estaba buscando. Gracias. – rtdp

Cuestiones relacionadas