ruby on rails - software - ¿Debo especificar las versiones exactas en mi Gemfile?
ruby on rails windows 10 (2)
Definitivamente diría usar los números de versión exactos. Probablemente siempre puedas simplemente bloquearlo en una versión principal, o nunca especificar ninguna versión, y estar bien, pero si realmente quieres ese nivel de control fino y tener 100% de confianza en tu programa cuando se ejecuta en otras máquinas, usa los números de versión exactos.
He estado en situaciones donde no se especificó el número de versión exacto, y cuando yo o alguien más hicimos una bundle install
, el proyecto se rompió porque pasó a una versión más nueva. Esto puede ser especialmente malo cuando se implementa en producción.
Bundler se ajusta a las especificaciones de tu gema, pero si le dices que solo use una versión mayor, entonces la bloquea. Así que solo se sabe "Oh, la versión está bloqueada en> 0.1" o lo que sea, pero no "Oh la versión está bloqueada específicamente en 0.1.2.3 ".
Me he dado cuenta de que en rubygems.org muchas de las gemas sugieren que las especifiques por versión principal en lugar de por versión exacta. Por ejemplo...
gem "haml-rails", "~> 0.3.4" # "$ bundle install" will acquire the
# latest version before 1.0.
Sin embargo, según los documentos de Bundler, me pareció que sería mejor definir la versión exacta de esta manera ...
gem "haml-rails", "0.3.4"
Así que está tu gema haml-rails y todas sus dependencias no se moverán hacia adelante. Si revisa el proyecto en una máquina diferente unas semanas más tarde y ejecuta $ bundle install
, tendrá exactamente las mismas versiones de todo lo que especificó.
He visto lanzamientos de puntos que rompen cosas, y pensé que parte de la idea de Bundler era " Bundle.lock
" para todas sus versiones de gemas.
Pero en rubygems.org usan "~>" mucho así que tal vez me falta algo?
Cualquier aclaración sería muy útil para mí en la comprensión de Bundler y la gestión de gemas.
Este es el propósito del archivo Gemfile.lock: ejecutar la bundle install
con un Gemfile.lock presente solo se instala usando las dependencias enumeradas allí; no vuelve a resolver el Gemfile. Para actualizar dependencias / actualizar versiones de gemas, debe realizar una bundle update
explícitamente, que actualizará su archivo Gemfile.lock.
Si no hubiera un Gemfile.lock, implementar un código para la producción sería un problema importante porque, como mencionas, las dependencias y las versiones de la gema podrían cambiar.
En resumen, debería estar generalmente seguro utilizando el operador de restricción de versión pesimista ( ~>
) como aconseja rubygems.org. Solo asegúrese de volver a ejecutar sus pruebas después de hacer una bundle update
para asegurarse de que no se rompa nada.
Hay un buen artículo de Yehuda Katz que tiene un poco más de información sobre Gemfile.lock.