2012-06-21 23 views
10

Desde la segunda vez de la ejecución de bundle install, las dependencias se cargan desde Gemfile.lock siempre que no se modifique Gemfile.¿Qué sucede al modificar Gemfile.lock directamente?

Pero me pregunto cómo se realiza la detección de cambios entre esos dos archivos.

Por ejemplo, si estoy agregando una nueva dependencia directamente en Gemfile.lock sin agregarlo a Gemfile (a diferencia de la mejor práctica ya que Gemfile.lock se genera automáticamente desde Gemfile), un bundle install consideraría Gemfile como cambiado?

De hecho, ¿el proceso bundle install compara todos los árboles Gemfile y Gemfile.lock para detectar cambios?

Si es así, incluso si estoy añadiendo una dependencia directa de Gemfile.lock, Gemfile se detectaría tan cambiado (ya que es diferente) y volvería a borrar Gemfile.lock (por lo que la pérdida de la dependencia añadido ...)

¿Cuál es el proceso de bundle install desde su lanzamiento por segunda vez?

Para ser más claro, mi pregunta es:

se producen cambios basan sólo de Gemfile? Eso significa que bundler mantendría una instantánea de Gemfile de cada número de ejecución N bundle install y simplemente lo compararía con la ejecución N + 1 de bundle install.

O no se crean instantáneas en la memoria de bundler y bundler realiza una comparación con Gemfile.lock cada vez para detectar si se debe considerar que Gemfile ha cambiado.

+0

simplemente elimine el archivo Gemlock, ponga sus gemas requeridas en el archivo gem y ejecute 'bundle install'. Eso es. No creo que sea una buena idea pensar mucho sobre el archivo de gemlock. ;) – uday

+0

@uDaY Estoy de acuerdo contigo pero tengo curiosidad sobre el proceso bajo el capó de la instalación del paquete :) – Mik378

+3

¿Has leído [esto] (http://gembundler.com/rationale.html) y [esto] (http://gembundler.com/man/bundle-install.1.html)? –

Respuesta

15

Si edita su Gemfile.lock, entonces la aplicación Rails dependería de otras versiones de gemas ... La integridad de su sistema de control de versiones de gemas se rompería en este caso. Es una muy mala idea editar el archivo Gemfile.lock directamente.

Por favor, ser un buen tipo y hacer negocios con Gemfile única

1

Sé que esta pregunta es muy antiguo, pero recientemente he tenido que lidiar con esto, así que estoy dando mi propia respuesta. Omniauth se actualizó recientemente a la versión 1.3.2 para corregir un problema de seguridad. Me asignaron la tarea de actualizar Omniauth a esta nueva versión parchada, sin embargo, al revisar nuestro Gemfile me di cuenta de que no teníamos esa Gema allí. Así que dije bien, tal vez solo puedo cambiar la versión en Gemfile.lock de 1.3.1 a 1.3.2. Para resumir, eso hubiera funcionado, pero resulta que no tuve que hacerlo de esa manera. Lo que terminé haciendo fue el siguiente comando

bundle update omniauth --patch

que dio como resultado el mismo cambio que iba a hacer de forma manual:

- omniauth (1.3.1) 
+ omniauth (1.3.2) 

Dicho esto, si usted piensa que necesita para hacer cambios para Gemfile.lock probablemente haya una manera de hacer ese cambio sin tocar el Gemfile.lock mismo. Simplemente haga bundle --help y probablemente encontrará y tendrá la opción de hacer lo que está tratando de lograr.

Cuestiones relacionadas