Ruby on Rails?)のGemパッケージ、プラグイン、エンジンの違いは何ですか?
Rails3.2の前にプラグインを使用していると思います。Rails3.2のリリース後はプラグインとしてgemパッケージを使用していますが、RORでエンジンをどのように使用できますか?
Rails 2から知っていたプラグイン(つまり、vendor/plugins
フォルダの下のプラグイン)は、Rails 3.2では非推奨になりました。 Railsで完全に削除されました。4。 "gemified plugin" の概念があります。プラグインは基本的にgemとして構築され、さまざまなRailsアプリケーション。
ただし、gemとプラグインの比較については、こちら Stackoverflow answer をご覧ください。短い話、Rails 2ユニバースのplugins
はextensionRailsアプリケーションのgemはパッケージ化されたRubyアプリケーションです。
Railsエンジンについては、これが Railsエンジンのかなり簡単で直感的な定義 であることがわかりました。
Rails Enginesは基本的にRailsアプリ全体であり、別のアプリのコンテナに存在します。別の言い方をすれば、ドキュメントの注記のとおり、アプリ自体は基本的にルートレベルの単なるエンジンです。長年にわたって、senエンジンはdeviseやRails_adminなどの宝石の一部として見られてきました。これらの例は、アプリに「マウント」された比較的自己完結型の機能の大規模なセットを提供することによるエンジンの能力を示しています。
また、RailsエンジンとプラグインはどちらもRubyアプリケーションのタイプであるため、技術的にすべてパッケージ化して、gemとして使用できます(通常)。
Rails 4. Rails 4.0リリースノート :なので、これ以上プラグインはありません。
Rails :: Pluginがなくなりました。ベンダー/プラグインにプラグインを追加する代わりに、パスまたはgit依存関係を持つgemsまたはbundlerを使用します。
すべてのengineをgemに含めることができます。 Gemは単に「ライブラリ」のエイリアスです。
それらの違いが何であるかを確認する最良の方法は、それらの3つを生成し、それらのディレクトリ構造を調べることです:
bundle gem a_gem
、Rails固有ではない機能に使用します。
Rails plugin new b_railtie
、Rails拡張機能に使用します。アプリケーションのような完全なセットアップは必要ありませんが、それでもRails固有のセットアップであるため(Railsダミーアプリ/test
の例)、おそらくrailtieを使用しますrailtieはRails::Railtie
を継承するクラスであり、コードをRailsに接続するための快適なDSLを提供します。たとえば、何らかのアクションを実行したい場合は:before
いくつかRailsアプリの初期化ステップ、initializer
Railtie class_methodを使用できます。 Paperclip
Rails plugin new c_engine --full
、Rails拡張機能として使用し、それ自体がアプリに組み込まれ、アプリにマウントされます。/app
dirおよびEngine
サブクラスが提供されます基本的な--full
以外の設定。
Rails plugin new c_engine --mountable
、--full
と同じですが、名前空間が作成され、アプリエンジンにマウントする準備ができます。 酒宴
そして、これはかなり良いリンクです: http://hawkins.io/2012/03/defining_plugins_gems_railties_and_engines 。
宝石
- Gemはパッケージ化されたRuby RubyGems で定義されたパッケージングシステムを使用するアプリケーションです。
Rails自体はGemです。
Rails gemはjruby-1.0\lib\Ruby\gems\1.8\gems\Rails-1.2.3に次のようにインストールされます。
[〜#〜] dir [〜#〜]ビン
[〜#〜] dir [〜#〜]組み込み
68,465 CHANGELOG
[〜#〜] dir [〜#〜]構成
[〜#〜] dir [〜#〜]ディスパッチ
[〜#〜] dir [〜#〜]ドキュメント
[〜#〜] dir [〜#〜]環境
307 fresh_rakefile
[〜#〜] dir [〜#〜]ヘルパー
[〜#〜] dir [〜#〜]html
[〜#〜] dir [〜#〜]lib
1,072 MIT-LICENSE
11,969 Rakefile
8,001 README
libディレクトリには、すべてのgemソースコードが含まれています。Gemバージョンのインストール、アップグレード、クエリを実行できます。my GemInstaller のようなツールを使用すると、RubyGemsのインストールとロードを1つのシンプルな設定ファイルで簡単に自動化できます。
- Rubyインタプリタ用にインストールされたGemは、そのインタプリタによってシステム全体で使用できます。
- 宝石はプラグインとして公開される場合があります。
- ベンダー/宝石でベンダーすることもできます。
プラグイン
- プラグインは、Rails Frameworkの拡張です。
- コマンドを使用してアップグレードすることはできません。アップグレードするには、アンインストールしてからアップグレードバージョンをインストールする必要があります。
- Railsアプリケーションにフックする必要があります。(init.rbが必要です)
- Install.rbファイルを用意します。
- プラグインをGemとして公開することはできません。
- アプリケーション全体でのみ使用できます。
Goldspikeプラグインは、次のようにアプリケーションのvendor\plugins\Rails-integrationディレクトリにインストールされます。
7,089 build.xml
1,141 LICENSE.txt
[〜#〜] dir [〜#〜]プラグイン
6,675 pom.xml
1,447 README
[〜#〜] dir [〜#〜]サンプル
plugins/goldspikeディレクトリは、
24 init.rb
25 install.rb
[〜#〜] dir [〜#〜]lib
549 Rakefile
536 README
[〜#〜] dir [〜#〜]タスク
[〜#〜] dir [〜#〜]テスト
libディレクトリには、すべてのプラグインソースコードが含まれています。
宝石vsプラグイン
エンジン
Rails用語のEngine
は、実際にはWebアプリケーションのサブアプリケーションです。たとえば、ブログ、フォーラム、または単純な認証など:これらは完全ではありません吹き飛ばされたアプリケーションが、任意のRailsアプリケーションに追加できるページ/ビュー/コントローラー/モデル。
Rails2では、これはplugin
を使用して行われます。 Rails3から、エンジンをgem
にパッケージ化できるようになりました。
したがって、どちらを使用するのですか?
エンジンはプラグインに非常に関連しています。エンジンはプラグインにすることができ、プラグインはエンジンにすることができます。これらはすべて、Rails plugin
ジェネレーターを使用して、2つの異なるオプション--full
または--mountable
を使用して作成できます。
エンジンと宝石の主な違いはここだと思います。
Gemsは、コードに統合する人に一連の機能を提供するほんの少しのコードです。
を含む:
パッケージ化してRubyGemsサーバーにプッシュできます。
エンジンは実際には宝石です。すべてのエンジンは宝石(パッケージされている場合)にすることができますが、すべての宝石がエンジンであるとは限りません。
エンジンはRuby on Rails機能であり、 Rails固有のエンティティ:モデル、コントローラー、ビュー、移行。
Railsアプリケーション内に統合する必要があり、単独で実行することはできません。
非常によく、すぐに読む 記事