web-dev-qa-db-fra.com

Gem Vs Plugin Vs Engine dans Ruby on Rails

Quelle est la différence entre le paquet, le plugin et le moteur Gem dans Ruby on Rails?

Je pense que nous utilisons le plugin avant Rails3.2 et après la publication de Rails3.2, nous utilisons le paquet gem comme plugin, mais comment utiliser le moteur dans le ROR?

24
Amrit Dhungana

Les plugins tels que vous les connaissiez depuis Rails 2 (c.-à-d. Des plugins situés dans le dossier vendor/plugins) étaient obsolètes pour Rails 3.2; son support a été complètement supprimé dans Rails 4. Il existe maintenant un concept de "plugin gemified" dans lequel les plugins sont essentiellement construits comme des gemmes et peuvent être partagés entre différentes applications Rails.

Mais pour répondre à votre question sur les gems vs plugins, consultez cette réponse Stackoverflow answer . L'histoire longue, plugins de l'univers Rails 2 est unextensionde l'application Rails, alors qu'une gemme est une application Ruby empaquetée.

En ce qui concerne les moteurs Rails, j’ai trouvé ceci une définition assez simple et intuitive d’un moteur Rails:

Rails Engines est essentiellement une application Rails entière qui vit dans le conteneur d'un autre. En d’autres termes, comme le note la documentation: une application elle-même est fondamentalement un moteur au niveau de la racine. Au fil des ans, nous avons vu les moteurs sen faire partie de joyaux tels que devise ou Rails_admin. Ces exemples illustrent la puissance des moteurs en fournissant un large ensemble de fonctionnalités relativement autonomes «montées» dans une application.

Et comme les moteurs et les plug-ins de Rails sont des types d’applications Ruby, ils peuvent tous être techniquement empaquetés et utilisés comme une gemme (en général). 

16
richsinn

Réponse citée de Différence entre les plugins et les gemmes Ruby?

Gem

  • Gem est une application empaquetée Ruby utilisant le système d’emballage défini par RubyGems .
  • Rails lui-même est un joyau.

    Rails gem est installé dans jruby-1.0\lib\Ruby\gems\1.8\gems\Rails-1.2.3 en tant que:

    DIRbin 
    DIRbuiltin 
    68,465 CHANGELOG 
    DIRconfigs 
    DIRenvois 
    DIRdoc 
    DIRenvironnements 
    307 fresh_rakefile 
    DIRhelpers 
    DIRhtml 
    DIRlib 
    1 072 MIT-LICENSE 
    11,969 Rakefile 
    8 001 README 
    Le répertoire lib contient tout le code source de gem. 

  • Nous pouvons installer, mettre à niveau et interroger la version de gem. Si vous utilisez un outil tel que mon GemInstaller , vous pouvez facilement automatiser l’installation et le chargement de RubyGems avec un seul fichier de configuration.

  • Gem installé pour l'interpréteur Ruby peut être utilisé à l'échelle du système par cet interprète.
  • Gem peut être publié en tant que plugin.
  • Peut aussi être vendu dans vendeur/gems.

Brancher

  • Le plugin est une extension de Rails Framework.
  • Ne peut pas être mis à niveau en utilisant une commande. Pour mettre à niveau, il faut désinstaller puis installer la version mise à niveau.
  • Doit être connecté à l'application Rails. (doit avoir init.rb)
  • Avoir un fichier install.rb.
  • Le plugin ne peut pas être publié en tant que Gem.
  • Ne peut être utilisé que dans toute l'application.

Le plug-in Goldspike est installé dans le répertoire vendor\plugins\Rails-integration de l'application en tant que: 
7 089 build.xml 
1 141 LICENSE.txt 
DIRplugins 
6,675 pom.xml 
1 447 README 
DIRsamples 
Le répertoire plugins/goldspike est composé de 
24 init.rb 
25 install.rb 
DIRlib 
549 Rakefile 
536 README 
DIRtâches 
DIRtest 
Le répertoire lib contient tout le code source du plugin.

Gem vs Plugins

  • Rails avait un moyen de charger des plugins à partir du répertoire vendor/plugins /. Ceci découragera probablement car Rails a ajouté la prise en charge du regroupement de gems avec le projet Dans le répertoire vendor/gems /. Les versions gem de rspec sont celles qui sont destinées à une utilisation quotidienne. Celles-ci doivent être utilisées à moins que vous ne preniez en charge une application Rails de la famille 1.2.x ou une version antérieure.
  • Il devient souvent plus rapide d’archiver et de sortir un référentiel utilisant Gems car vous n’incluez pas la bibliothèque dans votre application réelle. Il existe souvent des problèmes moins importants lors de l’utilisation de Plugins liés à une incompatibilité entre les versions logicielles équipe distribuée.
  • La règle générale est de faire de la fonctionnalité spécifique à Rails un plugin tout en transformant des bibliothèques Ruby plus générales en gems.

Moteur

Une terminologie Engine dans Rails est en réalité une sous-application d'une application Web. Par exemple, quelque chose comme un blog, un forum ou une authentification simple: il ne s’agit pas d’applications complètes, mais de pages/vues/contrôleurs/modèles pouvant être ajoutés à n’importe quelle application Rails.

Dans Rails2, ceci serait fait en utilisant une plugin. Maintenant, depuis Rails3, un moteur peut être empaqueté dans une gem.

  • Une gemme: est une bibliothèque générique, qui peut être facilement installée, qui sont gérée en versions, ont des dépendances et autres.
  • Un moteur: est une sous-application d'une application Rails, et depuis Rails 3, ceux-ci sont distribués comme une gemme (ce qui est génial!).

Alors, quand utiliserez-vous l’un ou l’autre:

  • créez un joyau si vous souhaitez partager les fonctionnalités de Ruby
  • créer un moteur (et le pack dans une gemme) si vous avez des parties de votre application Rails qui peuvent être utilisées plus généralement.

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

10
Vishnuraj V

Il n'y a plus de plugins depuis Rails 4. Notes de publication de Rails 4.0 :

Rails :: Plugin est parti. Au lieu d’ajouter des plugins aux vendeurs/plugins , Utilisez des gems ou un bundle avec des dépendances de chemin ou de git.

Tout engine peut être contenu dans une gemme. Gem est juste un alias d'une "bibliothèque".


Le meilleur moyen de voir quelle est leur différence est de générer trois d’entre eux et de parcourir leur structure de répertoires :

bundle gem a_gem, à utiliser pour les fonctionnalités non spécifiques à Rails.

Rails plugin new b_railtie, à utiliser pour les extensions Rails ne nécessitant pas de configuration complète semblable à une application. mais, comme il s'agit toujours d'une configuration spécifique à Rails (vous obtenez votre application factice Rails dans /test par exemple), vous allez probablement utiliser railtie . railtie est une classe qui hérite de Rails::Railtie et vous offre le confort DSL de connecter votre code à Rails. Par exemple, si vous souhaitez exécuter une action :before une étape d'initialisation de l'application Rails, vous pouvez utiliser initializer Railtie class_method. Trombone

Rails plugin new c_engine --full, utilisez pour les extensions Rails qui seront elles-mêmes des applications à part entière, montées dans votre application. vous donnera /app dir et Engine sous-classe en plus de la configuration de base non ---full.

Rails plugin new c_engine --mountable, identique à --full, mais créera des espaces de noms prêts à être montés dans votre moteur d'application. Spree

Et voici un très bon lien: http://hawkins.io/2012/03/defining_plugins_gems_railties_and_engines .

9
lakesare

Les moteurs sont très liés aux plugins. Les moteurs peuvent être des plugins et les plugins peuvent être des moteurs. Tous peuvent être créés à l'aide du générateur Rails plugin avec 2 options différentes --full ou --mountable.

Je pense que la principale différence ici entre les moteurs et les pierres précieuses.

Gems est juste un bout de code fournissant un ensemble de fonctionnalités à toute personne l’intégrant dans son code.

Il contient:

  • Gemspec
  • Dossier Lib

Peut être empaqueté et poussé sur les serveurs RubyGems

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

Nous pouvons le dire avec un autre mot. Engines est une fonctionRuby on Railsqui peut contenir des entités spécifiques à Rails: modèles, contrôleurs, vues, migrations.

Il doit être intégré àRailsapplication et ne peut pas être exécuté seul.

Très bien et lecture rapide Artricle

0
ahmed eshra