web-dev-qa-db-ja.com

Gem Vs Plugin Vs Engine in Ruby on Rails

Ruby on Rails?)のGemパッケージ、プラグイン、エンジンの違いは何ですか?

Rails3.2の前にプラグインを使用していると思います。Rails3.2のリリース後はプラグインとしてgemパッケージを使用していますが、RORでエンジンをどのように使用できますか?

25
Amrit Dhungana

Rails 2から知っていたプラグイン(つまり、vendor/pluginsフォルダの下のプラグイン)は、Rails 3.2では非推奨になりました。 Railsで完全に削除されました。4。 "gemified plugin" の概念があります。プラグインは基本的にgemとして構築され、さまざまなRailsアプリケーション。

ただし、gemとプラグインの比較については、こちら Stackoverflow answer をご覧ください。短い話、Rails 2ユニバースのpluginsextensionRailsアプリケーションのgemはパッケージ化されたRubyアプリケーションです。

Railsエンジンについては、これが Railsエンジンのかなり簡単で直感的な定義 であることがわかりました。

Rails Enginesは基本的にRailsアプリ全体であり、別のアプリのコンテナに存在します。別の言い方をすれば、ドキュメントの注記のとおり、アプリ自体は基本的にルートレベルの単なるエンジンです。長年にわたって、senエンジンはdeviseやRails_adminなどの宝石の一部として見られてきました。これらの例は、アプリに「マウント」された比較的自己完結型の機能の大規模なセットを提供することによるエンジンの能力を示しています。

また、RailsエンジンとプラグインはどちらもRubyアプリケーションのタイプであるため、技術的にすべてパッケージ化して、gemとして使用できます(通常)。

16
richsinn

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を使用しますrailtieRails::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

10
lakesare

プラグインとの違いRuby gems?

宝石
  • 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には、vendor/plugins /ディレクトリからプラグインをロードする方法がありました。 Railsは、vendor/gems /ディレクトリ内のプロジェクトにgemをバンドルするためのサポートを追加しました。rspecのgemバージョンは、日常的に使用するためのものです。 Rails 1.2.xファミリまたはそれ以前のアプリケーションをサポートしているのでない限り、これらを使用してください。
  • ライブラリを実際のアプリケーションに含めないため、Gemを使用してリポジトリをチェックインおよびチェックアウトする方が速くなることがよくあります。多くの場合、分散したチーム間でソフトウェアのバージョンに関して発生する非互換性に関連して、プラグインを使用することで問題が少なくなります。
  • 一般的な経験則は、より一般的なRubyライブラリをgemにして、Rails固有の機能をプラグインにすることです。

エンジン

Rails用語のEngineは、実際にはWebアプリケーションのサブアプリケーションです。たとえば、ブログ、フォーラム、または単純な認証など:これらは完全ではありません吹き飛ばされたアプリケーションが、任意のRailsアプリケーションに追加できるページ/ビュー/コントローラー/モデル。

Rails2では、これはpluginを使用して行われます。 Rails3から、エンジンをgemにパッケージ化できるようになりました。

  • Gem:は、簡単にインストールでき、バージョン管理され、依存関係などがある汎用ライブラリです。
  • エンジン:Railsアプリケーションのサブアプリケーションであり、Rails 3なので、これらはgemとして配布されます(これは素晴らしいです!))。

したがって、どちらを使用するのですか?

  • rubyの機能を共有したい場合は、gemを作成します
  • より一般的に使用できるRailsアプリケーションの一部がある場合は、エンジンを作成し、gemにパッケージ化します。

これは、エンジンを作成するためのアーカイブされたチュートリアルです。

10
Vishnuraj V

エンジンはプラグインに非常に関連しています。エンジンはプラグインにすることができ、プラグインはエンジンにすることができます。これらはすべて、Rails pluginジェネレーターを使用して、2つの異なるオプション--fullまたは--mountableを使用して作成できます。

エンジンと宝石の主な違いはここだと思います。

Gemsは、コードに統合する人に一連の機能を提供するほんの少しのコードです。

を含む:

  • ジェムスペック
  • Libフォルダー

パッケージ化してRubyGemsサーバーにプッシュできます。

エンジンは実際には宝石です。すべてのエンジンは宝石(パッケージされている場合)にすることができますが、すべての宝石がエンジンであるとは限りません。

エンジンはRuby on Rails機能であり、 Rails固有のエンティティ:モデル、コントローラー、ビュー、移行。

Railsアプリケーション内に統合する必要があり、単独で実行することはできません。

非常によく、すぐに読む 記事

0
ahmed eshra