我正在Ruby中開發應用程序。它起初是一個小型的命令行實用程序,但它現在變得相當大,基本上有三個不同的應用程序:一個命令行實用程序,一個Sinatra Web服務器和另一個暴露RESTful Web API的服務器,三個都依靠數據庫進行各種操作使用相同數據的不同事物。Ruby:如何正確地將應用程序拆分爲多個寶石
繼Yehuda Katz的this great article之後,我用bundler管理所有依賴關係,並將我的Gemfile.lock提交到源代碼控制。我依賴於許多第三方依賴項,並且對於某些我關心特定版本(由於已知問題)。
現在,應用程序的所有三個部分都使用一些常見的基礎結構代碼:主要是用於與數據庫通信的數據訪問層以及一個或兩個其他常見類。但除此之外,他們可以被視爲單獨的應用程序。 如果這是其他語言,比如Java,我可能會將它分成三個應用程序,並將常見的DAL代碼放入三個引用的類庫中。
在Ruby中,我知道gem應該用來打包代碼庫。 因此,我正在考慮爲應用程序創建三個寶石,併爲通用庫代碼創建第四個寶石。或者,也許三個「非寶石」應用程序,都依靠一個共同的寶石。
事情是,我不知道如何管理這種方式的第三方依賴。在上述文章中,YK指出,對於Gem開發,Gemfile.lock應將而不是添加到源代碼管理中。 就我而言,我確實需要我使用的某些第三方gem的特定版本,而Gemfile.lock在最近的初始部署期間一直非常重要。 此外,我不打算髮布這些寶石,因爲它不是一個開源項目。 我只需要一個很好的乾淨的方式來管理我的依賴項,包括第三方的寶石和內部。
所以......
- 我應該創建四個不同的寶石?
- 我應該把它分成三個應用程序,都依賴於我創建的一個常見寶石?
- Gemfile.lock怎麼樣?在哪些情況下將它保持在源控制中是明智的,爲什麼?
- 如果它不打算髮布,是否存在一些缺點或優勢,將寶石開發成一種普通的應用程序?
我很想聽到一些意見和建議,從經驗豐富的Ruby開發者如何做到這一點...
感謝。
謝謝。如果我理解正確,那麼將我的應用程序拆分爲gems-only,然後以這種方式指定依賴關係在部署方案中不太理想,因爲我無法控制所有依賴項的確切版本。這就是我的問題的原因。我只是想知道哪兩個選項更可取,以便以我可以管理用於部署的依賴關係的方式拆分應用程序,並且還可以在自己的庫中重用代碼。希望這個問題稍微縮小一點。我想確保我不會錯過任何東西。 – avivr
@avivr - 在我的更新 –
中嘗試回答您的問題,因此您確實回答了問題:)我收集的是,您建議有三個非寶石應用程序,每個應用程序都在Git中提交Gemfile.lock,在寶石中的通用代碼,所以它可以被重用。此外,我不應該關心gem自己的特定依賴版本,因爲三個應用程序中的Gemfile.lock將處理所有事情。正確? – avivr