原文 :https://www.travisluong.com/ruby-on-rails-mountable-vs-full-engine/
一個Rails Engine 本質是一個 Rails application,你能夠附加到其餘的rails application上提供附加功能。
一個Rails Engine是一個Rails應用程序,由於它遵循與「普通」Rails應用程序相同的模型視圖控制器模式。javascript
rails Engine 和一般的rails application有什麼的不一樣呢,一個rails engine一般使用命令,$ rails plugin new my_engine --mountable 或 $ rails plugin new my_engine --full生成,css
由於engines被打包做爲ruby gems,因此你使用須要的gem時,在gemspec中添加而不是gemfile中,當你使用bundler時,在gemfile中使用gemspec函數將會自動加載他們,因此你必須在engine.rb中使用require引入它們,不然你會看到nomethod的錯誤,同時,一個虛擬的application會在你的測試目錄中生成,用來測試使用,你必須拷貝整個遷移文件到你的虛擬application中,以及任何你但願使用這個engine的appliction上,幸虧,engine有一個rake命令能夠作這個事,rake my_engine:install:migrationsjava
兩種類型的主要不一樣是,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一塊兒使用ruby