2012-03-06 62 views
2

我有一個包含許多可選組件的應用程序,所有組件都有自己的複雜依賴關係。例如,某些部署可能需要使用LDAP功能,並且需要加載ldap相關的gem。但許多人不會,而那些不應該不需要安裝ldap相關的寶石。使用捆綁程序在運行時加載依賴關係

如何根據用戶(部署者)啓用的組件,使用Bundler加載這些依賴項?

我不想強制部署者手動編輯他們的Gemfiles。必須通過應用程序的UI來啓用/禁用組件。

只是在Gemfile中包含每個可能的依賴都不是理想的。一些很少使用的組件需要大量複雜的本地編譯。另一種解決方案可能是讓應用程序編輯它自己的Gemfile。但是這有點尷尬,而且每次更換組件時都可能需要重新啓動。

Bundler有沒有在運行時動態加載gem的方法?如果沒有,是否有替代品可以提供類似Bundler的沙箱,但允許動態加載?

+0

[本捆紮機特性請求(https://github.com/carlhuda/bundler/issues/1636)可以是相關的。 – 2012-03-06 19:09:04

+0

感謝您的鏈接安德魯。我認爲如果功能要求得到滿足,我們會變得更好(只是 - 會更好),但我希望可以在我的應用程序中使用類似'Bundle.gem「gemname」'的調用碼。我有一種在Bundler當前的架構中可能無法實現的感覺,但我想知道是否還有其他類似的項目可以做到這一點。 – 2012-03-07 17:15:07

回答

0

您可以提供多個Gemfiles,並使用bundle install --gemfile來使用特定的gemfile,並只安裝該部署所需的Gems。

在您的應用程序,你可以再使用Bundle.setup與先前安裝的Gemfile的相應的組只是加載相應的寶石

當然那不是一個很好的和簡單的方法,但應該給你你想要的功能。

參見 Bundler Setup bundle install

相關問題