[解決済み] Rails 3.1。エンジン vs. マウント可能なアプリ
質問
RailsエンジンとMountableアプリの違いを理解するのを手伝ってくれる人はいますか? Rails 3.1では、"rails new pluginでどちらかを作成することができます。 _ __ "コマンドを実行します。
rails plugin new forum --full # Engine
rails plugin new forum --mountable # Mountable App
どのような場合にどちらかを使いたいのでしょうか? 例えば、エンジンをgemとしてパッケージ化できることは知っています。 マウント可能なアプリの場合はそうではないのでしょうか? 他にどのような違いがあるのでしょうか?
どのように解決するのですか?
以下のことに気づきました。
フルエンジン
フルエンジンでは、親アプリケーションはエンジンからルートを継承します。 この場合
parent_app/config/routes.rb
. Gemfileでgemを指定するだけで、親アプリがモデルやルートなどを継承することができます。 エンジンルートは以下のように指定します。
# my_engine/config/routes.rb
Rails.application.routes.draw do
# whatever
end
モデルやコントローラなどの名前空間はありません. これらはすぐに 親アプリケーションからアクセス可能です。
マウント可能なエンジン
エンジンの名前空間はデフォルトで分離されています。
# my_engine/lib/my_engine/engine.rb
module MyEngine
class Engine < Rails::Engine
isolate_namespace MyEngine
end
end
マウント可能なエンジンでは、ルートは名前空間であり、親アプリはこの機能を1つのルートの下にバンドルすることができます。
# my_engine/config/routes.rb
MyEngine::Engine.routes.draw do
#whatever
end
# parent_app/config/routes.rb
ParentApp::Application.routes.draw do
mount MyEngine::Engine => "/engine", :as => "namespaced"
end
モデル、コントローラなどは親アプリケーションから分離されています。ただし、ヘルパーは簡単に共有できます。
これらは私が見つけた主な違いです。 おそらく他にもあるのでしょう。 私は はこちら で質問しましたが、まだ回答がありません。
私の印象では、フル エンジンは親アプリケーションから分離されないので、親アプリに隣接するスタンドアロン アプリケーションとして使用するのが最善だと思います。 名前の衝突が発生する可能性があると思います。
マウント可能なエンジンは、名前の衝突を避け、エンジンを親アプリケーションの 1 つの特定のルートの下にバンドルしたい状況で使用できます。 たとえば、私はカスタマー サービス用に設計された最初のエンジンを構築することに取り組んでいます。 親アプリケーションは、次のような単一のルートの下にその機能をバンドルすることができます。
mount Cornerstone::Engine => "/cornerstone", :as => "help"
もし私の仮定が大きく外れていたら、どなたか教えてください、このレスを修正します。 私はこのテーマについて小さな記事を作りました ここに 乾杯!
関連
-
[解決済み] SocketError (getaddrinfo: Name or service not known) - Sunspot/Solr Rails development
-
[解決済み] PGError: エラー: リレーションのカラムが存在しない
-
[解決済み] Railsのインストール時に「/usr/binディレクトリに書き込み権限がありません」というエラーが発生しますが、どのように修正すればよいですか?
-
[解決済み] Ruby on Railsのマイグレーションでデータベースのカラムの名前を変更するにはどうすればよいですか?
-
[解決済み] Herokuのデータベースを空にする方法
-
[解決済み] REST JSON APIのサーバーとクライアントを分離?[クローズド]
-
[解決済み】rmagick gem install "Can't find Magick-config"...
-
[解決済み】Railsのhas_one/has_manyの:sourceオプションについて理解する。
-
[解決済み] サインアップするためのDeviseルートを削除するにはどうすればよいですか?
-
[解決済み] Rails: redirect_toで:errorがあってもflash[:error]が空なのはなぜ?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] PGError: エラー: リレーションのカラムが存在しない
-
[解決済み] Rails 3 - link_to を image_tag + text で表示する。
-
[解決済み] Railsマイグレーションで、既存のテーブルにカラムを追加する
-
[解決済み] Railsのインストール時に「/usr/binディレクトリに書き込み権限がありません」というエラーが発生しますが、どのように修正すればよいですか?
-
[解決済み] SocketError (getaddrinfo: Name or service not known) - Sunspot/Solr Rails development
-
[解決済み] REST JSON APIのサーバーとクライアントを分離?[クローズド]
-
[解決済み】Railsのhas_one/has_manyの:sourceオプションについて理解する。
-
[解決済み] 新しいRailsアプリを作成するときに、test-unitではなくRSpecを使用するようにRailsに指示するにはどうすればよいですか?
-
[解決済み] 既存のRailsカラムのbooleanに:default => trueを追加する。
-
[解決済み] EmacsのRubyオートコンプリートがほぼ使えるようになった