一個Rails Engine 本質是一個 Rails application,你可以附加到其他的rails application上提供附加功能。
一個Rails Engine是一個Rails應用程式,因為它遵循與“普通”Rails應用程式相同的模型視圖控制器模式。
rails Engine 和通常的rails application有什麼的不同呢,一個rails engine通常使用命令,$ rails plugin new my_engine --mountable 或 $ rails plugin new my_engine --full產生,
因為engines被打包作為ruby gems,所以你使用需要的gem時,在gemspec中添加而不是gemfile中,當你使用bundler時,在gemfile中使用gemspec函數將會自動載入他們,所以你必須在engine.rb中使用require引入它們,否則你會看到nomethod的錯誤,同時,一個虛擬application會在你的測試目錄中產生,用來測試使用,你必須拷貝整個遷移檔案到你的虛擬application中,以及任何你希望使用這個engine的appliction上,幸好,engine有一個rake命令可以做這個事,rake my_engine:install:migrations
兩種類型的主要不同是,mountable engine有獨立的命名空間,而full engine沒有,這意味著,mountable engine可以作為host application的一部分運行, 而full engine 必須整合到host applicatin中,本質上,一個full engine與host application分享Models views, controllers, helpers和路由,一個mountable engine卻不分享,mountable engine有自己的layout,javascript, css檔案,而full engine卻沒有,使用mountable engine 需要在你的host application的路由檔案中 使用mount函數掛載到一個子路徑下,full engine卻不用看起來,一個 ountable engine適合單獨的application,例如 blog,forum,一個full engine適合 添加到一個已存在的application例如 驗證方案,或者許可權介面,mountable engine適和與application同時使用,full engine適合與application一起使用