19

Che differenza c'è tra pacchetto Gem, plugin e Engine in Ruby on Rails?Gem Vs Plugin Vs Engine in Ruby on Rails

Penso che usiamo il plugin prima di Rails3.2 e dopo che rails3.2 è stato rilasciato stiamo usando il pacchetto gem come plugin ma come possiamo usare il motore in ROR?

risposta

9

risposta citato da Difference between plugins and Ruby gems?

Gem

  • Gem è un'applicazione rubino confezionato utilizzando il sistema di confezionamento costituito da RubyGems.
  • Rails è una gemma.

    Rails gemma è installato in JRuby-1.0 \ lib \ ruby ​​\ gemme \ 1.8 \ gemme \ rotaie-1.2.3 come:

    DIR bin
    DIR incorporato
    68.465 CHANGELOG
    DIR configurazioni
    DIR dispacci
    DIR doc
    DIR ambienti
    307 fresh_rakefile
    DIR aiutanti
    DIR html
    DIR lib
    1.072 MIT-LICENZA
    11.969 Rakefile
    8.001 README
    La directory lib contiene tutte le gemma codice sorgente.

  • possiamo installare, aggiornare e interrogare la gemma version.If si utilizza uno strumento come il mio GemInstaller, si può facilmente automatizzare l'installazione e il caricamento di RubyGems con un singolo file di configurazione semplice.

  • La gemma installata per l'interprete Ruby può essere utilizzata a livello di sistema da quell'interprete.
  • La gemma può essere pubblicata come plug-in.
  • Può anche essere venduto in fornitore/gemme.

plugin

  • plugin è un'estensione di rotaie quadro.
  • Impossibile aggiornare utilizzando un comando. Per aggiornare si deve disinstallare e quindi installare la versione aggiornata.
  • deve essere agganciato all'applicazione rotaie. (deve avere init.rb)
  • Avere un file install.rb.
  • Il plug-in non può essere pubblicato come gemma.
  • Può essere utilizzato solo a livello di applicazione.

Goldspike plugin è installato in vendor \ plugins \ rotaie-integrazione directory dell'applicazione come:
7089 build.xml
1.141 LICENSE.txt
DIR plugin
6.675 pom.xml
1.447 README
DIR campioni
plugins/goldspike consiste di
24 init.rb
25 install.rb
DIR lib
549 Rakefile
536 README
DIR compiti
DIR prova
La directory lib contiene tutto il codice sorgente del plugin.

Gem vs plugin

  • Rails aveva un modo di plugin di carico dal/plugins/fornitore. Questo molto probabilmente svanirà quando Rails ha aggiunto il supporto per il raggruppamento delle gemme con il progetto nella directory fornitore/gems /. Le versioni gem di rspec sono quelle che sono destinate all'uso quotidiano. Si dovrebbe andare con quelli a meno che non si stia supportando un'applicazione Rails nella famiglia 1.2.x o precedente.
  • Spesso diventa più veloce effettuare il check-in e il check-out di un repository utilizzando Gemme poiché non si include la libreria nella propria applicazione. Spesso ci sono problemi minori con l'uso di plugin relativi all'incompatibilità derivanti dalle versioni del software nel team distribuito.
  • La regola generale è quella di rendere un plug-in funzionalità specifiche di Rails rendendo più generiche le librerie Ruby in gemme.

motore

Un Engine in Rails terminologia è un realtà un sottoapplicazione di una web-application. Ad esempio, qualcosa come un blog, un forum o una semplice autenticazione: queste non sono applicazioni complete, ma pagine/viste/controller/modelli che possono essere aggiunti a qualsiasi applicazione di rotaie.

Nelle guide2 ciò avverrebbe utilizzando plugin. Da quando rails3 un motore può essere impacchettato in un gem.

  • Una gemma: è una libreria generica, che può essere facilmente installata, che è gestita in versione, ha dipendenze e così via.
  • Un motore: è una sottoapplicazione di un'applicazione Rails e poiché Rails 3 sono distribuiti come gemma (che è fantastico!).

Quindi, quando pensate di utilizzare uno o l'altro:

  • creare un gioiello se si desidera condividere rubino funzionalità
  • creare un motore (e del pacchetto in una gemma) se si dispone di parti della tua applicazione di rotaie che possono essere utilizzate più in generale.

Here is an archived tutorial for creating an engine..

14

Plugin come li si sapeva da Rails 2 (vale a dire i plugin nella cartella vendor/plugins) sono stati deprecati per Rails 3.2; il supporto per questo è stato completamente rimosso in Rails 4. Ora, c'è un concetto di "gemified plugin" in cui i plug-in sono essenzialmente costruiti come gemme e possono essere condivisi su diverse applicazioni Rails.

Ma per rispondere alla tua domanda su gemme vs plugin, consulta questo Stackoverflow answer. Per farla breve, plugins dall'universo di Rails 2 è un'estensione dell'applicazione rota, mentre una gemma è un'applicazione rubino impacchettata.

Per quanto riguarda i motori di Rails, ho trovato questo per essere a pretty easy and intuitive definition di un motore Rails:

Rails Motori è fondamentalmente una intera applicazione Rails che vive nel contenitore di un altro. In altre parole, come nota la documentazione: un'app di per sé è fondamentalmente solo un motore a livello di root. Nel corso degli anni, abbiamo visto i motori Sen come parti di gemme come Devise o Rails_admin. Questi esempi mostrano la potenza dei motori fornendo un'ampia serie di funzionalità relativamente autonome "montate" in un'app.

E poiché entrambi i motori di rotaie e i plugin sono tipi di applicazioni di rubini, possono tutti essere tecnicamente imballati e utilizzati come gemma (di solito).

8

Non ci sono altri plugin dal Rails 4. Rails 4.0 release notes:

Rails :: Plugin è andato. Invece di aggiungere plug-in al fornitore/plug-in utilizzare gems o bundler con path o git dependencies.

Qualsiasi motore può essere contenuta in un gioiello. Gemma è solo un alias di una "biblioteca".


miglior modo per vedere cosa la loro differenza è, sta generando tre di loro e guardando attraverso la loro struttura di directory:

bundle gem a_gem, utilizzare per le funzionalità specifiche non-rails-.

rails plugin new b_railtie, utilizzare per le estensioni di rotaie che non richiedono la completa configurazione dell'applicazione. ma, poiché è ancora una configurazione specifica per i binari (si ottiene l'app fittizia Rails in /test ad es.), probabilmente si utilizzerà railtie in esso.railtie è una classe che eredita da Rails::Railtie e ti dà il comodo DSL per collegare il tuo codice a Rails. Ad esempio, se si desidera eseguire un'azione :before durante l'inizializzazione dell'app Rails, è possibile utilizzare initializer Railtie class_method. Paperclip

rails plugin new c_engine --full, utilizzare per estensioni di guide che saranno l'applicazione a tutti gli effetti, montate nella vostra app. ti fornirà la sottoclasse /app e la sottoclasse Engine oltre alla configurazione di base non --full.

rails plugin new c_engine --mountable, come --full, ma creerà spazi dei nomi, pronto per essere montato nel motore dell'app. Spree

E qui c'è un link piuttosto buono: http://hawkins.io/2012/03/defining_plugins_gems_railties_and_engines.

0

I motori sono molto correlati ai plugin. I motori possono essere plugin e plugin possono essere motori. Tutti possono essere creati utilizzando il generatore rails plugin con 2 diverse opzioni --full o --mountable.

Penso che il principale sia diverso tra Motori e Gemme.

Gemme è solo un po 'di codice che fornisce un insieme di funzionalità a chiunque lo integri nel suo codice.

Contiene:

  • cartella Gemspec
  • Lib

possono essere confezionati e spinto ai server RubyGems

Motori sono in realtà gemme. Tutti i motori possono essere gemme (se confezionati) ma non tutte le gemme sono motori.

Possiamo dire con una parola diversa, Motori è una Ruby on Rails funzione, che può contenere entità Rails-specifiche: modelli, controller, viste, le migrazioni.

ha bisogno di essere integrato all'interno Rails applicazione e non può essere eseguito per conto proprio.

Molto buono e lettura veloce Artricle