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
Respuesta
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.
' 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
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
también gemas que solo proporcionan activos estáticos. – pestilence669
- 1. Probando Ruby Gems en Rails
- 2. Compartir modelos entre aplicaciones Rails usando gems
- 3. Rails gems/tools for performance benchmarking?
- 4. no puede averiguar qué =: = [A, B] significa
- 5. Averiguar qué compilador usa Maven
- 6. ¿Cómo saber qué aplicación JAXB se utiliza?
- 7. Metric-fu en mi aplicación Rails 3 no se ejecutará
- 8. ¿Utiliza "error_messages" en Rails 3.2? (Genera error "método no definido")
- 9. ¿Por qué Rails precarga todas sus dependencias (gems) durante el tiempo de arranque?
- 10. de Ruby Gems devuelve "comando no encontrado"
- 11. RVM finding system gems 'executables
- 12. Instalación de Ruby Gems manualmente
- 13. Cómo averiguar qué recursos no se utilizan en una aplicación para Android
- 14. ¿Por qué no se carga jQuery en mi aplicación Rails 3.2.3?
- 15. ¿Qué usuario está ejecutando mi aplicación Rails?
- 16. ¿Por qué ItemsControl no utiliza My ItemTemplate?
- 17. ¿Por qué Python no utiliza `except`` isinstance`?
- 18. Ruby Gems con datos persistentes
- 19. Necesito una ruta completa de gems desde dentro de una aplicación de rieles
- 20. Rails Ruby Gems vs Pure Development al generar un blog enriquecido
- 21. Error al instalar gems
- 22. Averiguar cobertura de la prueba
- 23. ¿Qué tabla de Oracle utiliza una secuencia?
- 24. ¿Por qué la nueva aplicación Rails 3.2.2 no incluye lib/assets en las rutas de los activos?
- 25. ¿Para qué se utiliza la "tira" (aplicación GCC)?
- 26. comprobar qué versión de la aplicación se utiliza
- 27. RubyMine no puede reconocer la aplicación Rails
- 28. Rails 3 plantillas de aplicación
- 29. extraño problema con la aplicación Rails y mestizo
- 30. unicornio cuelga diciendo Refreshing Gems
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. –
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
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