Gem Vs Plugin Vs Engine in Ruby on Rails

Quelle est la différence entre gem package, plugin et Engine dans Ruby on Rails ?

je pense que nous utilisons le plugin avant de Rails3.2 et après rails3.2 est la version que nous utilisons gem paquet comme plugin, mais comment pouvons-nous utiliser le moteur de ROR ?

23
demandé sur Amrit Dhungana 2014-04-16 23:28:53

4 réponses

Les Plugins

tels que vous les connaissiez sur les Rails 2 (c'est-à-dire les plugins sous le dossier vendor/plugins ) ont été dépréciés pour les Rails 3.2; Le support pour cela a été complètement supprimé dans les Rails 4. Maintenant, il y a un concept de "plugin gemified" où les plugins sont essentiellement construits en tant que gemmes, et peuvent être partagés entre différentes applications de Rails.

mais pour répondre à votre question sur les gemmes vs plugins, consultez ce Stackoverflow answer . Pour faire court, plugins de L'univers Rails 2 est une extension de l'application rails, alors qu'un gem est une application Ruby emballée.

comme pour les moteurs de Rails, j'ai trouvé que c'est une définition assez facile et intuitive d'un moteur de Rails:

Rails moteurs est fondamentalement une application de Rails entiers qui vit dans le conteneur d'un autre. Mettre une autre façon, comme le note le docs: une application elle-même est fondamentalement juste un moteur au niveau de la racine. Au fil des ans, nous avons vu les moteurs sen comme des pièces de gemmes telles que la devise ou rails_admin. Ces exemples montrent la puissance des moteurs en fournissant un grand ensemble de fonctionnalité relativement autonome "monté" dans une application.

et comme les deux moteurs rails et les plugins sont des types d'applications ruby, ils peuvent tous techniquement être emballés et utilisés comme un joyau (habituellement).

16
répondu richsinn 2017-05-23 12:26:09

Répondre cité de la Différence entre les plugins et les gems Ruby?

Gem
  • le Bijou est emballé application ruby en utilisant le système d'emballage défini par RubyGems .
  • Rails lui-même est un petit Bijou.

    Rails gem est installé dans jruby-1.0\lib\ruby\gemmes\1.8\gemmes\rails 1.2.3 comme:



    DIR bin

    DIR builtin

    68,465 CHANGELOG

    DIR configs

    DIR distribue

    DIR doc

    DIR environnements

    307 fresh_rakefile

    DIR helpers

    DIR html

    DIR lib
    1519230920 "" 1,072 MIT-LICENCE

    11,969 Rakefile

    8,001 README

    Le répertoire lib contient tout le code source gem.

  • nous pouvons installer,mettre à jour et interroger la version gem.Si on utilise un outil comme mon GemInstaller , on peut facilement automatiser l'installation et le chargement de RubyGems avec un simple fichier de configuration.

  • gemme installé pour Ruby interpreter peut être utilisé dans tout le système par cet interprète.
  • Gem peuvent être publiés en tant que plugin.
  • peut aussi être vendu dans vendeur/gemmes.

Plugin

  • Plugin est une extension de Rails de Cadre.
  • ne peut pas être mis à niveau en utilisant une commande. Pour mettre à niveau un doit désinstaller puis installer la version améliorée.
  • doit être accroché dans l'application rails. (a init.rb)
  • Avoir une installation.dossier rb.
  • Plugin ne peut pas être publié en tant que gemme.
  • ne peut être utilisé que dans toutes les applications.

Goldspike plugin est installé dans vendeur\plugins\rails-l'intégration de répertoire de l'application:

7 089 build.xml

1,141 de LICENCE.txt

DIR plugins

6 675 pom.xml

1,447 README

DIR samples

plugins / goldspike directory se compose de

24 init.rb

25 installer.rb

DIR lib

549 Rakefile

536 README

DIR tasks

DIR test

Le répertoire lib contient tout le code source du plugin.

Gem vs Plugins

  • les Rails avaient un moyen de charger des plugins à partir du répertoire vendor/plugins/. Ce sera très probablement déprécier car Rails a ajouté le soutien pour le groupement des gemmes avec le projet dans le répertoire vendor/ gems/. Les versions gem de rspec sont celles qui sont destinées à un usage quotidien. On devrait aller avec ceux-ci à moins que vous supportez une application Rails dans le 1.2.x famille ou plus tôt.
  • il devient souvent plus rapide de s'enregistrer et de sortir d'un dépôt en utilisant des gemmes que vous n'incluez pas la bibliothèque dans votre application réelle. Il y a souvent des problèmes moins graves utilisation de Plugins liés à l'incompatibilité concernant les versions de logiciels au sein de l'équipe distribuée.
  • règle générale de base est de faire des fonctionnalités spécifiques aux Rails un plugin tout en faisant des bibliothèques Ruby plus générales en gemmes.

moteur

Un Engine dans les rails de la terminologie est en fait un subapplication d'une web-application. Par exemple, quelque chose comme un blog, un forum, ou authentification simple: ce ne sont pas des applications complètes, mais des pages/vues/contrôleurs/modèles qui peuvent être ajoutés à n'importe quelle application de rails.

dans rails2 cela se ferait en utilisant un plugin . Maintenant, depuis rails3 un moteur peut être emballé dans un gem .

    "1519130920 Un petit bijou: est une bibliothèque générique, qui peut être facilement installé, qui en sont à la version géré par, ont des dépendances et un tel.
  • un moteur: est un sous-application D'une application Rails, et depuis Rails 3 ceux-ci sont distribués comme un gem (ce qui est génial!).

alors quand utiliserez-vous l'un ou l'autre:

  • créer un joyau si vous voulez partager Ruby-fonctionnalité
  • créer un moteur (et l'emballer dans un gem) si vous avez des parties de votre application rails qui peuvent être utilisés plus généralement.

Voici un tutoriel archivé pour créer un moteur..

10
répondu Vishnuraj V 2017-05-23 12:10:08

il n'y a plus plugins depuis Rails 4. Rails 4.0 notes de mise à jour :

Rails::Plugin a disparu. Au lieu d'ajouter des plugins au vendeur / plugins utilisez gems ou bundler avec des dépendances path ou git.

Tout moteur peut être contenue dans un bijou. Gem n'est qu'un pseudonyme d'une "bibliothèque".


la meilleure façon de voir ce qu'est leur différence, est d'en générer trois et de regarder à travers leur structure de répertoire :

bundle gem a_gem , utilisation pour une fonctionnalité non spécifique aux rails.

rails plugin new b_railtie , utilisez pour les extensions de rails qui ne nécessitent pas une configuration complète semblable à une application. mais, comme il s'agit toujours d'une configuration spécifique aux rails (vous obtenez votre application de simulation de Rails dans /test eg), vous allez probablement utiliser railtie . railtie est une classe qui hérite de Rails::Railtie , et vous donne la DSL confortable pour accrocher votre code dans les Rails. par exemple, si vous voulez qu'une action soit exécutée :before , vous pouvez utiliser initializer Class_method. Trombone

rails plugin new c_engine --full , utilisez pour les extensions de rails qui seront eux-mêmes une application complète, montée dans votre application. vous donnera /app dir et Engine sous-classe en plus de base non - --full setup.

rails plugin new c_engine --mountable , identique à --full , mais va créer des espaces de noms, prêt à être monté dans votre moteur app. Spree

et voici un assez bon lien: http://hawkins.io/2012/03/defining_plugins_gems_railties_and_engines .

8
répondu lakesare 2018-01-12 22:44:01
Les moteurs

sont très liés aux plugins. Les moteurs peuvent être des plugins et plugins peuvent être des moteurs. Tous peuvent être créés en utilisant rails plugin générateur avec 2 options différentes --full ou --mountable .

je pense que la principale différence ici entre les moteurs et les gemmes.

Gems est juste un peu de code fournissant un ensemble de fonctionnalités à quiconque l'intègre dans son code.

contient:

  • Gemspec
  • dossier Lib

Peuvent être emballés et poussé à RubyGems serveurs

Les moteurs sont en fait des gemmes. Tous les moteurs peuvent être des gemmes (s'ils sont empaquetés), mais tous les gemmes ne sont pas des moteurs.

nous pouvons le dire avec un mot différent, Les moteurs est un Ruby sur les Rails caractéristique, qui peut contenir Entités spécifiques aux Rails: modèles, contrôleurs, vues, migrations.

il doit être intégré à l'intérieur Rails application et ne peut pas fonctionner seul.

très bon et rapide lecture Artricle

0
répondu ahmed eshra 2017-05-14 13:12:17