2010-04-15 18 views
2

我想開發一些非平凡的Rails應用程序,它們都實現了一組核心功能,但每個應用程序都有一些特定的定製,擴展和美學差異。我怎樣才能將所有這些系統的核心功能(模型,控制器,幫助器,支持類,測試)拉出來,以便更新內核將使每一個基於它的應用程序都受益?如何抽象出幾個Rails應用程序的核心功能?

我見過Rails引擎,但它們似乎太分離了,幾乎被抽象出來建造。我認爲他們可以將一個組件添加到現有的應用程序,例如將博客引擎添加到現有的電子商務網站。由於引擎似乎主要是自包含的,因此在保持DRY的同時覆蓋它們的功能和視圖似乎很困難和不方便。

我也考慮過把代碼抽象成一個寶石,但是這似乎有點奇怪。我是否會根據Rails gem製作寶石,並在其中定義模型&控制器,然後在我的各種應用程序中對它們進行子類化?還是我在包含在我的各種應用程序中的不同位置的gem中定義了許多模塊?我如何測試gem,然後測試一組定製和覆蓋它的功能?我還關心如何開發gem和Rails應用程序,我可以將gem的git存儲庫供應給應用程序並推送,因此我無需在每次迭代中構建新的gem?此外,有沒有私人寶石主機/我可以設置自己的寶石來源?

此外,這種承諾的任何一般建議?抽象範式要堅持?需要閱讀?以前做過這些的聰明人的評論?謝謝!

回答

1

從來沒有做過這樣的事情,但我想這一個Rails插件將是它在正確的地方:

http://guides.rubyonrails.org/plugins.html#models

http://guides.rubyonrails.org/plugins.html#controllers

http://guides.rubyonrails.org/plugins.html#helpers

而且你可以創建一個寶石其後出:

http://guides.rubyonrails.org/plugins.html#plugingems

+0

一個插件確實是最簡單的方法... – severin 2010-04-15 08:45:41

+0

你可以嘗試和解釋我將如何重新打開(或子類如果重新打開是不可能的)在我的插件中定義的類在應用程序內?我的主要問題是在插件和應用程序之間共享代碼,其中模型的正常行爲在插件中定義,但應用程序僅覆蓋幾個方法。如果我在應用程序中定義模型,那麼Rails首先會在那裏找到它,找到它正在尋找的類,並且缺少的常量被定義。 Rails從不查看插件,這意味着我的核心功能都沒有通過。 – hornairs 2010-04-17 18:01:43

相關問題