versiones ver rails instalar ruby-on-rails ruby bundler gemfile gemfile.lock

ruby-on-rails - instalar - ver version de rails



Cuál es la diferencia entre Gemfile y Gemfile.lock en Ruby on Rails (3)

El Gemfile es donde especifica qué gemas desea usar y le permite especificar qué versiones.

El archivo Gemfile.lock es donde Bundler registra las versiones exactas que se instalaron. De esta forma, cuando se carga la misma biblioteca / proyecto en otra máquina, al ejecutar la bundle install se verá Gemfile.lock e instalará las mismas versiones exactas, en lugar de simplemente usar Gemfile e instalar las versiones más recientes. (Ejecutar diferentes versiones en diferentes máquinas podría llevar a pruebas rotas, etc.). No debería tener que editar directamente el archivo de bloqueo.

Consulte el Propósito y Fundamento de Bundler , específicamente la sección Revisando su Código en Control de Versión.

Soy un principiante de Ruby on Rails y estoy usando Rails 3.0.9.

¿Cuál es la diferencia entre Gemfile y Gemfile.lock en Rails?


Por lo general, escribimos dependencias en Gemfile como:

gem "nokogiri", "~> 1.4.4" gem ''bcrypt-ruby'', ''~> 3.0.0'' gem ''uglifier'', ''>= 1.2.3'' ..

Aquí básicamente dices: " Quiero nokogiri mientras sea mayor que la versión 1.4.4 ", etc. Ahora supongamos que he configurado mi Gemfile 8 meses y configuré mi aplicación con éxito con este requisito. Hace 8 meses la versión de nokogiri era 1.4.4 . Mis aplicaciones de rieles funcionaban perfectamente sin problemas con esta versión.

Ahora creo que estoy tratando de compilar con el mismo Gemfile . Pero si miramos las versiones de nokogiri , vemos que la versión estable actual ha cambiado a 1.4.9 . Eso significa que si intentamos compilar, bundler instalará la versión 1.4.9 de nokogiri (supongamos que no tenemos Gemfile.lock ).

Qué significa eso ?

Como puede ver si no tiene ningún Gemfile.lock y ejecutar:

bundle install

entonces las gemas usadas actualmente pueden ser diferentes en cualquier momento . Tu aplicación usó la versión 1.4.4 y funciona hace 8 meses sin ningún problema, pero si tratas de compilarla ahora obtienes la versión 1.4.9 . Tal vez está roto con la última versión de nokogiri , la increíble característica que usaste con 1.4.4 no está más disponible, etc.

Para evitar este tipo de problema, se usa Gemfile.lock . En Gemfile.lock solo se Gemfile.lock las versiones exactas y, por lo tanto, solo se instalarán. Eso significa que si distribuyes tu aplicación con Gemfile.lock , cada máquina tendrá las mismas gemas instaladas y lo más importante es que todas obtendrán la misma versión . Esto le dará una pila de implementación estable y común.

¿Cómo se crea Gemfile.lock?

Se crea automáticamente con el primero:

bundle install

mando. Después de eso cada vez que ejecutas bundle install , el paquete primero buscará Gemfile.lock e instalará las gemas allí especificadas. Es un hábito distribuir este archivo entre sus proyectos para brindar estabilidad y constancia.

¿Cómo actualizar Gemfile.lock?

Si está contento con la última versión de sus aplicaciones, puede actualizar Gemfile.lock . Simplemente refleje sus cambios en Gemfile . Eso significa cambiar las dependencias a las nuevas versiones exactas en Gemfile . Después de esa carrera:

bundle install

Esto te actualizará Gemfile.lock con tu última versión de aplicaciones.


The Gemfile.lock

Cuando ejecuta bundle install, Bundler conservará los nombres completos y las versiones de todas las gemas que utilizó (incluidas las dependencias de las gemas especificadas en Gemfile (5)) en un archivo llamado Gemfile.lock.

Bundler utiliza este archivo en todas las llamadas posteriores a bundle install, lo que garantiza que siempre use el mismo código exacto, incluso cuando su aplicación se mueve entre máquinas.

Debido a la forma en que funciona la resolución de dependencia, incluso un cambio aparentemente pequeño (por ejemplo, una actualización de un punto de liberación de una dependencia de una gema en su Gemfile (5)) puede resultar en gemas radicalmente diferentes para satisfacer todas las dependencias.

Como resultado, DEBERÍA verificar su Gemfile.lock en el control de la versión. Si no lo hace, cada máquina que verifique su repositorio (incluido su servidor de producción) resolverá todas las dependencias nuevamente, lo que dará lugar a que se utilicen diferentes versiones de código de terceros si alguna de las gemas en el Gemfile (5) o cualquier otro de sus dependencias se han actualizado.