Gem Vs Plugin Vs Engine en Ruby on Rails
ruby-on-rails ruby-on-rails-3 (4)
Los motores están muy relacionados con los complementos. Los motores pueden ser complementos y los complementos pueden ser motores. Todos ellos se pueden crear usando el generador de rails plugin
con 2 opciones diferentes: --full
o --mountable
.
Creo que las principales diferencias aquí entre los motores y las gemas.
Gems es solo un poco de código que proporciona un conjunto de funcionalidades a cualquiera que lo integre en su código.
Contiene:
- Gemspec
- Carpeta lib
Se puede empaquetar y enviar a los servidores RubyGems
Los motores son en realidad gemas. Todos los motores pueden ser gemas (si están empaquetados) pero no todas las gemas son motores.
Podemos decirlo con una palabra diferente, Motores es una característica de Ruby on Rails , que puede contener entidades específicas de Rails: modelos, controladores, vistas, migraciones.
Debe integrarse dentro de la aplicación Rails y no se puede ejecutar por sí solo.
¿Cuál es la diferencia entre el paquete Gem, el complemento y el motor en Ruby on Rails?
Creo que usamos el plugin antes de Rails3.2 y después de que rails3.2 se lance, estamos usando el paquete gem como plugin, pero ¿cómo podemos usar el motor en ROR?
No hay más complementos desde Rails 4. Notas de lanzamiento de Rails 4.0 :
Rails :: Plugin se ha ido. En lugar de agregar complementos a proveedores / complementos, use gemas o agrupador con dependencias de ruta o git.
Cualquier motor puede estar contenido en una gema. Gema es solo un alias de una ''biblioteca''.
La mejor manera de ver cuál es su diferencia es generar tres de ellos y mirar a través de su estructura de directorios :
bundle gem a_gem
, se usa para funcionalidades no específicas de rieles.
rails plugin new b_railtie
, se usa para extensiones de rieles que no requieren una configuración completa similar a la aplicación. pero, dado que sigue siendo una configuración específica de los rieles (obtienes tu aplicación simulada Rails en /test
por ejemplo), probablemente usarás rieles en ella. railtie es una clase que se hereda de Rails::Railtie
y le brinda el DSL cómodo para conectar su código a Rails. por ejemplo, si desea realizar alguna acción :before
algún paso de inicialización de la aplicación Rails, puede usar el initializer
Railtie class_method. Paperclip
rails plugin new c_engine --full
, use para extensiones de rieles que serán la aplicación completa, montadas en su aplicación. le proporcionará /app
dir y Engine
subclass además de la configuración básica no --full
.
rails plugin new c_engine --mountable
, igual que --full
, pero creará espacios de nombres, listos para ser montados en el motor de su aplicación. Spree
Y aquí hay un enlace bastante bueno: http://hawkins.io/2012/03/defining_plugins_gems_railties_and_engines .
Joya
- Gem es una aplicación de ruby empaquetada que utiliza el sistema de empaquetado definido por RubyGems .
Rails en sí es una joya.
La gema de Rails se instala en jruby-1.0 / lib / ruby / gems / 1.8 / gems / rails-1.2.3 como:
Bandeja de DIR
DIR incorporado
68,465 CAMBIO
Configuraciones de DIR
Despachos DIR
DIR doc
Entornos DIR
307 fresh_rakefile
Ayudantes de DIR
DIR html
DIR lib
1,072 MIT-LICENCIA
11.969 Rakefile
8,001 readme
El directorio lib contiene todo el código fuente de la gema.Podemos instalar, actualizar y consultar la versión de la gema. Si uno usa una herramienta como mi GemInstaller , uno puede automatizar fácilmente la instalación y carga de RubyGems con un solo archivo de configuración simple.
- Gem instalado para el intérprete de Ruby puede ser utilizado en todo el sistema por ese intérprete.
- Gema puede ser publicada como un plugin.
- También se puede vender en proveedores / gemas.
Enchufar
- El plugin es una extensión de Rails Framework.
- No se puede actualizar utilizando un comando. Para actualizar uno hay que desinstalar y luego instalar la versión actualizada.
- Tiene que ser enganchado en la aplicación de rieles. (tiene que tener init.rb)
- Tener un archivo install.rb.
- El complemento no se puede publicar como una gema.
- Solo se puede utilizar en toda la aplicación.
El complemento Goldspike se instala en el directorio vendor / plugins / rails-integration de la aplicación como:
7,089 build.xml
1,141 LICENCIA.txt
Plugins DIR
6,675 pom.xml
1,447 readme
Muestras DIR
El directorio de plugins / goldspike consiste en
24 init.rb
25 install.rb
DIR lib
549 Rakefile
536 readme
Tareas DIR
Prueba DIR
El directorio lib contiene todo el código fuente del complemento.
Gem vs Plugins
- Rails tenía una forma de cargar complementos desde el directorio del proveedor / complementos /. Esto probablemente se desapruebe, ya que Rails ha agregado soporte para agrupar gemas con el proyecto en el directorio proveedor / gemas /. Las versiones de gema de rspec son las destinadas al uso diario. Uno debe ir con ellos a menos que esté admitiendo una aplicación Rails en la familia 1.2.x o anterior.
- A menudo, se hace más rápido el registro y la salida de un repositorio utilizando Gems, ya que no está incluyendo la biblioteca en su aplicación real. A menudo hay problemas menores con el uso de complementos relacionados con la incompatibilidad que surgen en relación con las versiones de software entre el equipo distribuido.
- La regla general es hacer que la funcionalidad específica de Rails se convierta en un complemento al mismo tiempo que convierte bibliotecas Ruby más generales en gemas.
Motor
La terminología de Engine
in rails es en realidad una subaplicación de una aplicación web. Por ejemplo, algo como un blog, un foro o una autenticación simple: estas no son aplicaciones completas, 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 se puede empaquetar en una gem
.
- Una gema: es una biblioteca genérica, que se puede instalar fácilmente, que está administrada por versión, tiene dependencias y demás.
- Un motor: es una sub-aplicación de una aplicación de Rails, y desde Rails 3 estos se distribuyen como una gema (¡que es increíble!).
Entonces, ¿cuándo usarás uno u otro?
- Crea una gema si quieres compartir la funcionalidad ruby
- cree un motor (y envuélvalo en una gema) si tiene partes de su aplicación de rieles que pueden usarse de manera más general.
Los complementos como los conocía de Rails 2 (es decir, complementos en la carpeta vendor/plugins
) quedaron obsoletos para Rails 3.2; el soporte para él se eliminó por completo en Rails 4. Ahora, hay un concepto de "complemento gemificado" en el que los complementos se crean esencialmente como gemas y se pueden compartir en diferentes aplicaciones de Rails.
Pero para responder a su pregunta sobre gems vs plugins, consulte esta respuesta de . En pocas palabras, los plugins
del universo de Rails 2 son una extensión de la aplicación de rails, mientras que una gema es una aplicación de ruby empaquetada.
En cuanto a los motores Rails, he encontrado que esta es una definición bastante sencilla e intuitiva de un motor Rails:
Rails Engines es básicamente una aplicación completa de Rails que vive en el contenedor de otra. Dicho de otra manera, como señalan los documentos: una aplicación en sí misma es básicamente un motor en el nivel raíz. A lo largo de los años, hemos visto a los motores sen como partes de gemas como el devise o rails_admin. Este ejemplo muestra el poder de los motores al proporcionar un gran conjunto de funciones relativamente autónomas "montadas" en una aplicación.
Y dado que tanto los motores de rieles como los complementos son tipos de aplicaciones de rubí, todos pueden técnicamente ser empaquetados y usados como una gema (generalmente).