Beide Optionen erzeugen einen Motor . Der Unterschied besteht darin, dass --mountable
die Engine in einem isolierten Namespace erstellt wird, während --full
eine Engine erstellt wird, die den Namespace der Hauptanwendung gemeinsam nutzt.
Die Unterschiede werden auf drei Arten manifestiert:
1) Die Engine-Klassendatei ruft Folgendes auf isolate_namespace
:
lib / my_full_engine / engine.rb:
module MyFullEngine
class Engine < Rails::Engine
end
end
lib / my_mountable_engine / engine.rb:
module MyMountableEngine
class Engine < Rails::Engine
isolate_namespace MyMountableEngine # --mountable option inserted this line
end
end
2) Die config/routes.rb
Datei der Engine wird mit einem Namespace versehen:
Voller Motor:
Rails.application.routes.draw do
end
Montierter Motor:
MyMountableEngine::Engine.routes.draw do
end
3) Die Dateistruktur für Controller, Helfer, Ansichten und Assets wird mit einem Namespace versehen:
App / Controller erstellen / my_mountable_engine /application_controller.rb
App / helpers / my_mountable_engine
erstellen /application_helper.rb App / Mailer erstellen App / Modelle
erstellen App / Ansichten / Layouts erstellen / my_mountable_engine /application.html.erb
App / Assets / Images / my_mountable_eng erstellen
App / Assets / Stylesheets
erstellen / my_mountable_engine /application.css
App / Assets / Javascripts
erstellen / my_mountable_engine /application.js Create
Config / Routes.rb Create Lib / My_Mountable_engine.rb Create
Lib / Tasks / My_Mountable_engine.rake Create
Lib / My_Mountable_engine .rb
Erstellen Sie lib / my_mountable_engine .rb
Erläuterung
Der Anwendungsfall für die --full
Option scheint sehr begrenzt zu sein. Persönlich kann ich mir keinen guten Grund vorstellen, warum Sie Ihren Code in eine Engine trennen möchten, ohne auch den Namespace zu isolieren. Im Wesentlichen erhalten Sie nur zwei eng gekoppelte Anwendungen, die identische Dateistrukturen und alle Konflikte und Codeverluste gemeinsam nutzen das bedeutet.
Jede Dokumentation, die ich gesehen habe, demonstriert die --mountable
Option, und in der Tat empfiehlt Ihnen die aktuelle Kantenführung dringend, sie einzuschließen isolate namespace
- was dasselbe ist, als würde man "Verwendung --mountable
über" sagen --full
.
Schließlich gibt es Terminologie-Verwirrung: rails plugin -h
Zeigt leider die folgenden Beschreibungen:
[--full] # Generieren Sie eine Rails-Engine mit einer gebündelten Rails-Anwendung zum Testen.
[--mountable] # Generieren Sie eine montierbare isolierte Anwendung
Dies erweckt den Eindruck, dass Sie --full
eine "Engine" --mountable
erstellen und etwas anderes erstellen, das als "montierbare Anwendung" bezeichnet wird, obwohl es sich tatsächlich um beide Engines handelt - eine mit Namespace und eine ohne. Dies führt zwangsläufig zu Verwirrung, da Benutzer, die eine Engine erstellen möchten, wahrscheinlich davon ausgehen, dass dies --full
die relevantere Option ist.
Fazit
rails plugin new something --full
= Engine im Namespace Ihrer App. (Warum würdest du?)
rails plugin new something --mountable
= Engine mit eigenem Namespace. (Genial)
Verweise