¿Cuál es la diferencia entre los dos y cuándo se debe usar uno en lugar del otro?Rieles 3: ¿Cuál es la diferencia entre un motor y una gema?
18
A
Respuesta
33
Una terminología Engine
en rieles es en realidad una subaplicación de una aplicación web. Por ejemplo, algo así como un blog, un foro o una autenticación simple: estas no son aplicaciones en toda regla, sino páginas/vistas/controladores/modelos que se pueden agregar a cualquier aplicación de rieles.
En rails2 esto se haría usando un plugin
. Ahora, desde rails3, un motor puede empaquetarse en un gem
.
A gem
es una biblioteca de ruby, que se puede encontrar en http://rubygems.org y es la forma estándar (única) de empaquetar y distribuir el código de rubí a otros rubyistas.
Para concluir:
- Una joya: es una biblioteca genérica, que se puede instalar fácilmente, que son gestionados versión, tener dependencias y tal.
- Un motor: es una sub-aplicación de una aplicación Rails, y desde Rails 3 estas se distribuyen como una gema (¡lo cual es increíble!).
Así que cuando va a utilizar uno u otro:
- crear una joya si desea compartir rubí funcionalidad
- crear un motor (y empaquetarlo en una joya) si tiene partes de su aplicación de rieles que se pueden usar de manera más general.
Espero que esto ayude.
Cuestiones relacionadas
- 1. Notificación de excepción Gema y rieles 3
- 2. Rieles 3: ¿Eliminar una gema del proyecto?
- 3. Cuál es la diferencia entre gem bootstrap-sass y gema twitter-bootstrap-rails
- 4. ¿Cuál es la diferencia entre una mónada y un cierre?
- 5. ¿Cuál es la diferencia entre un RoutedCommand y una RoutedUICommand?
- 6. ¿Cuál es la diferencia entre una matriz y un objeto?
- 7. ¿Cuál es la diferencia entre un hilo y una fibra?
- 8. ¿Cuál es la diferencia entre un algoritmo y una función?
- 9. ¿Cuál es la diferencia entre un diccionario y una matriz?
- 10. ¿Cuál es la diferencia entre una instancia y un objeto?
- 11. ¿Cuál es la diferencia entre un tema y una plantilla?
- 12. ¿Cuál es la diferencia entre una heurística y un algoritmo?
- 13. ¿Cuál es la diferencia entre un método y una función?
- 14. ¿Cuál es la diferencia entre "Fuente" y "Fuente generada"?
- 15. ¿Cuál es la diferencia entre dict() y {}?
- 16. ¿Cuál es la diferencia entre .ToString (+) y ""
- 17. ¿Cuál es la diferencia entre ".equals" y "=="?
- 18. ¿Cuál es la diferencia entre {0} y ""?
- 19. ¿Cuál es la diferencia entre "$^N" y "$ +"?
- 20. Cuál es la diferencia entre = y: =
- 21. ¿Cuál es la diferencia entre gemas y complementos?
- 22. ¿Cuál es la diferencia entre una subrutina y una función?
- 23. ¿cuál es la diferencia entre una clase y una biblioteca?
- 24. ¿Cuál es la diferencia entre " " y ""?
- 25. ¿cuál es la diferencia entre:.! y: r !?
- 26. ¿Cuál es la diferencia entre [indefinido] y [,]?
- 27. Cuál es la diferencia entre $ (...) y `...`
- 28. ¿Cuál es la diferencia entre `##` y `hashCode`?
- 29. ¿Cuál es la diferencia entre + = y = +?
- 30. Cuál es la diferencia entre $ y jQuery
gracias. una pregunta más: las aplicaciones que utilizamos como Hoptoad, excepcionales, newrelic, etc., ¿son gemas o motores? gracias – donald
Son todas gemas. Una gema puede unirse fácilmente a Rails, mediante la implementación de una clase llamada 'Railtie'. Esto significa que puede vincular la funcionalidad a los rieles. Si implementa una clase llamada 'Engine', puede ofrecer más: modelos, vistas, controladores, y desde carriles 3.1 también activos como hojas de estilo, javascripts, ... Las gemas que mencionas todas implementan el' Railtie' para enlazar en Rails. Esto significa que estos deben ser utilizados junto con Rails. De modo que, dependiendo de la funcionalidad que ofrezca a Rails, tiene la opción de crear un 'Railtie' o' Engine'. – nathanvda
Si la funcionalidad que desea agregar en la gema no depende directamente de Rails (no se engancha en ninguna de las clases), crea una gema normal. P.ej. Nokogiri es un ejemplo. Pero, para concluir, desde los rieles 3 siempre usarás una gema para extender los rieles. Esta es también la razón por la que bundler se ha vuelto tan importante. – nathanvda