2012-12-04 34 views
4

實際上很難制定問題,所以我只是解釋一下情況。如何組織Rails應用程序和多個引擎的開發

我正在研究一個由多個子應用程序組成的應用程序。主應用程序只提供導航欄和一些基本功能,如配置用戶和權限,而子應用程序提供實際功能。

現在,這是一個Rails 2應用程序,子應用程序嵌入到框架中,它不是很好的設計,也非常複雜。 幸運的是,我們現在有引擎,這將是這個應用程序更爲理想的解決方案。

到現在爲止所有東西都在顛覆中,並且可以一次更新,共享代碼使用外部。我們希望在重組和重構時轉向git。 過去幾天我一直在尋找關於bundler,git submodules和git子樹的網頁,但是我還沒有找到一個很好的描述,當你正在開發所有的項目時,如何正確地管理一個包含多個引擎/寶石的大型項目。他們在同一時間。

我特別希望能夠:

  • 使用捆紮機管理依賴
  • 沒有安裝我們自己的寶石和發動機融入全球寶石路徑,但相對於主應用程序,作爲git倉庫
  • 有我們自己的寶石和引擎設置爲git倉庫(可能與捆紮機的本地路徑覆蓋)
  • 一個簡單的方法來獲取所有的依賴關係(包安裝),它拉的最新版本,我們自己的寶石和發動機,如果這是不可能的,那麼一家公司(或許是一個耙任務?)
  • 使新開發人員能夠快速設置整個開發環境(git克隆應用程序,捆綁安裝依賴包括所有自己的Gems和引擎,本地)
  • 部署與Capistrano的,容易

我已經想到了:

  • 包括一切到一個倉庫,似乎擊敗的獨立寶石/發動機的宗旨,爲我,我也覺得它止跌不允許我們管理m的依賴關係在通過捆紮機我們的發動機AIN應用
  • 使用子模塊,我瞭解爲什麼它是壞的,並與我們的開發人員數量,直到有人提交的子模塊指針承諾,只有在他的地方存在,只是時間早晚的問題太多帖子回購
  • git的子樹工具,似乎很複雜,我

所以有你任何一個類似的設置,你怎麼管理它,使更新和提交更改儘可能容易?你把你的Engine/Gem代碼放在哪個應用程序依賴的地方?

TL; DR如何管理由多個引擎和寶石組成的大型鋼軌項目?

回答

4

我們公司有類似的情況(但可能不那麼複雜)。我們所做的(就目前而言)並且也可以爲您工作:

將您的Rails應用程序放入其自己的git存儲庫中。各種各樣的寶石也都有他們自己的存儲庫(雖然可以做其他事情,但「一個寶石=一個git存儲庫」會讓你的生活更輕鬆)。

然後在你的Rails應用程序的Gemfile,你有幾種選擇

  • 默認應該是每個寶石是指它的git倉庫(使束將裝載它們)
  • 當一些本地工作的Gem和Rails應用程序,可以通過在本地重寫路徑(請參閱:http://gembundler.com/v1.2/git.html)將Gemfile更改爲使用本地路徑(http://gembundler.com/v1.2/gemfile.html)或更好。請注意,這兩個選項是不同的:第一個使用路徑,第二個使用本地git存儲庫(因此第一個而不是第二個可以看到新的未提交更改)。

爲了方便地更新所有的寶石,我會創建一個小的.sh腳本(只是爲了啓動各種克隆或更新操作,並且安裝捆綁包以便所有東西都乾乾淨淨),並將其與主應用程序。我還會在團隊中獲得一個「標準文件夾組織」(即,每個人都使用他們選擇的基礎文件夾,在Rails應用程序和每個寶石文件夾下),以使該過程更容易。我希望這可以幫助或獲得你的想法(你的問題是相當複雜和多方面的,所以我不是100%確定這是你在找什麼)。

+0

謝謝你的迴應!這是我們一旦有人敢開始向git遷移就要做的事情。 – maufl

+0

而不是自己創建「捆綁安裝」腳本,這個寶石將爲你做:https://github.com/EPI-USE-Labs/git-bundle –

+0

如果你需要擴展引擎/ git回購之間的功能,你可以用這個gem使用裝飾器模式:https://github.com/EPI-USE-Labs/activesupport-decorators –

1

如何管理您的Gem依賴關係?
Bundler通過Gemfile。

如何管理您的引擎?
Bundler通過Gemfile。
將您的引擎設計爲寶石,並在您的Gemfile中提供它們的git repo位置。如果您需要示例,請查看如何在您的Gemfile中包含https://github.com/radar/forem gem。

此外,這幫助我學習了Rails引擎,http://edgeguides.rubyonrails.org/engines.html

你來自Java Land嗎?
Rails確實有一條學習曲線,但並不像Java山峭壁一樣落下。

+0

我在Ruby之前做過Java,但是總的來說,我做了比Java更多的Ruby。我認爲你在閱讀部分時同時開發了多個引擎。很抱歉,您的回答並沒有提供任何新的對我來說。 – maufl

相關問題