2011-07-25 11 views

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.

+0

gracias. una pregunta más: las aplicaciones que utilizamos como Hoptoad, excepcionales, newrelic, etc., ¿son gemas o motores? gracias – donald

+7

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

+1

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

Cuestiones relacionadas