paquete de rieles limpio

88

Después de actualizar un paquete, tendrá algunas gemas que pueden estar obsoletas, ya que se instaló una versión más nueva de esa gema. No existe tal comando en el bundleejecutable, es decir bundle clean. ¿Cómo deshacerse de estas gemas obsoletas?

Este es un intento de reducir el tamaño de las babosas en mi aplicación rails.

iGbanam
fuente

Respuestas:

132

Si está utilizando Bundler 1.1 o posterior, puede utilizarlo bundle clean, tal como lo imaginaba. Esto es redundante si está usando bundle install --path(Bundler administra la ubicación que especificó con --path, por lo que asume la responsabilidad de eliminar las gemas obsoletas), pero si ha usado Bundler para instalar las gemas como gemas del sistema bundle clean --force, eliminará las gemas del sistema que no requerido por su Gemfile. Advertencia cegadoramente obvia: ¡no hagas esto si tienes otras aplicaciones que dependen de gemas del sistema que no están en tu Gemfile!

Pat Shaughnessy tiene una buena descripción bundle cleany otras nuevas incorporaciones en el paquete 1.1 .

David Waller
fuente
30
Para aquellos que usan rvm, tenga en cuenta que bundle clean --forceno toca sus gemas globales, sino solo las de su conjunto de gemas actual. Entonces bundle clean --forceproduce el mismo resultado que y es más rápido que rvm gemset emptyseguido de bundle install.
Gabe Kopley
19
DESCARGO DE RESPONSABILIDAD: "Bundle clean --force" puede hacer volar una gran cantidad de gemas si no tienes cuidado. Esa debería ser la primera línea de esta respuesta ... especialmente porque tiene tantos votos. ¡TEN CUIDADO!
jerrylroberts
36

Si está utilizando RVM, puede usarlo rvm gemset emptypara el conjunto de gemas actual: este comando eliminará todas las gemas instaladas en el conjunto de gemas actual (el conjunto de gemas en sí permanecerá en su lugar). Luego, ejecute bundle installpara instalar versiones reales de gemas. También asegúrese de no eliminar gemas generales como rake, bundler, etc. durante rvm gemset empty(si es el caso, instálelas manualmente a través de gem installantes bundle install).

trushkevich
fuente
22

Si está utilizando RVM, puede instalar sus gemas en conjuntos de gemas . De esa manera, cuando desee realizar una limpieza completa, simplemente puede eliminar el conjunto de gemas, que a su vez elimina todas las gemas instaladas en él. Su otra opción es simplemente desinstalar sus gemas no utilizadas y volver a ejecutar su bundle installcomando.

Dado que el empaquetador está destinado a ser una herramienta de control de versiones de gemas proyecto por proyecto, no proporciona un bundle cleancomando. Hacerlo significaría la posibilidad de eliminar gemas asociadas con otros proyectos también, lo que no sería deseable. Eso significa que el agrupador es probablemente la herramienta incorrecta para administrar su directorio de gemas. Mi recomendación personal sería utilizar los conjuntos de gemas RVM para proteger sus gemas en ciertos proyectos o versiones de rubí.

Pan Thomakos
fuente
41
No es necesario eliminar el conjunto de gemas, solo puede escribir 'rvm gemset empty gemset_name' y luego ejecutar 'bundle install' nuevamente.
JAG
Gran explicación Saber eso sobre el bundler ayuda. Gracias.
Volte
9
paquete limpio - la fuerza hará el trabajo
marinero
con rvm, limpie la carpeta .rvm / gems / ruby-xxxxxx / especificaciones si "bundle install" se niega a volver a descargar gems.
Barbacan
@JAG Agregaría que necesita 'gema install bundler' después de limpiar gemset para poder llamar a bundle install
maleta
13

Honestamente, tuve problemas con las dependencias circulares del paquete y la mejor manera de hacerlo es rm -rf .bundle. Ahórrese el dolor de cabeza y use el martillo.

Tyler Brock
fuente
1
Tuve que hacer esto para que dejara de molestarme acerca de "debes llamar a la instalación del paquete con --no-deployment". Gracias
Kevin
2
Gracias por la idea. Aunque para mí, usar un martillo más grande ayudó. rvm implode --forcey luego reinstalar rvm
Ryan
1

¿Asumo que instalas gemas en vendor/bundle? Si es así, ¿por qué no simplemente eliminar todas las gemas y hacer una limpieza bundle install?

Leonid Shevtsov
fuente
mi directorio de proveedores solo realiza un seguimiento de los activos y los complementos instalados. I'm on Rails 3.1
iGbanam
Entonces, ¿cuál es la razón para eliminar las gemas no utilizadas si no se copian en el despliegue? No ocupan tanto espacio.
Leonid Shevtsov
estoy implementando esta aplicación de rieles en una intranet; lo que significa que manejo los archivos y el entorno localmente. Si conoce alguna solución que pueda usar para esto, por favor compártala.
iGbanam
0

Simplemente elimine las gemas obsoletas de su Gemfile. Si estás hablando de Heroku (no lo mencionaste), entonces la babosa se compila en cada nueva versión, solo usando el contenido actual de ese archivo.

Gareth
fuente
esto no es necesariamente para heroku. Quiero reducir el tamaño de la propia aplicación de rieles.
iGbanam
0

Simplemente ejecute, para limpiar gemas obsoletas y eliminar advertencias de impresión tras paquete.

bundle clean --force

codevb
fuente