2012-03-20 8 views
5

Trabajando en una aplicación que tiene casi 200 gemas. ¿Alguien ha descubierto cómo aislar las gemas que no se usan para que puedan sacarse de la mezcla?Averiguar qué aplicación Gems Rails no utiliza

+3

La única manera que conozco de hacer esto es eliminarlos uno por uno y ver si las cosas se rompen. Esto es mucho más fácil si tiene una cobertura de prueba completa. Saber * qué * hacen las gemas hace que sea más fácil adivinar cuáles ya no son necesarias. –

+0

Gracias. Tomaría un tiempo, pero esa es probablemente la única forma segura de hacerlo. A menos que hubiera algo que analizara los métodos, cada gema se extendía y luego grep la aplicación. – s84

+1

Como dijo @AndrewMarshall, probablemente sea mejor agregar cobertura de prueba (completa). Suponiendo que su aplicación es grande, lleva mucho tiempo probar cada cosa cuando se elimina una gema. Después de eso otra vez cuando se quita otra gema, y ​​así sucesivamente ... – Veger

Respuesta

3

Debido a la naturaleza dinámica de Ruby, no es posible saber con certeza si una gema es o no se usa sin pruebas. Aunque es una mala práctica cargarlos en ad-hoc sin una buena razón, es posible requerir una gema en cualquier punto de la ejecución del programa. No necesitan cargarse por adelantado.

Aunque puede haber ventajas para cargar gemas a demanda, por ejemplo, manteniendo una menor huella de memoria y reduciendo los tiempos de inicio, hace que sea difícil determinar si realmente se usan o dónde.

No siempre hay una correlación entre el nombre de una gema y los métodos que utiliza. Mientras que muchos tienen un espacio de nombres que se agota fácilmente, algunos simplemente agregan métodos a las clases existentes que pueden complicar su seguimiento, especialmente si van tan lejos como para parchear los métodos antiguos con los nuevos que tienen el mismo nombre.

Si puede ejercitar una gran parte de la aplicación a través de las pruebas unitarias, funcionales y de integración, es posible que pueda usar ruby-prof para obtener, por lo menos, una idea de qué gemas se utilizan. Eso podría facilitar la identificación de candidatos para la eliminación.

+0

' Debido a la naturaleza dinámica de Ruby ... '- ¿qué hay de cargar todos los métodos de cada gema, y ​​luego greping para ellos en la aplicación, solo devuelve la gema/método paris si es mayor que 0, y para los métodos de clase simplemente sub el nombre de la clase, etc ...? Creo que es posible. No? – s84

+0

Algunas gemas generan sus métodos automáticamente, por lo que nunca se sabe cuáles son los métodos una de esas cosas que es fundamentalmente incognoscible debido a la flexibilidad que ofrece el diseño. Solo se puede adivinar, nunca se puede estar seguro. Sin embargo, la cantidad de certeza que tiene aumenta a medida que aumenta la cobertura de su prueba. – tadman

+0

también gemas que solo proporcionan activos estáticos. – pestilence669

Cuestiones relacionadas