我創建了一個gem(我們稱之爲mygem
),它基本上是一個Sinatra服務器,旨在安裝在基於Rack的應用程序中。通過Bundler和安裝的應用程序加載當地寶石
在我的寶石的gemspec文件,我有以下幾點:
gem.add_dependency 'kss'
而且在我的寶石的Gemfile中,從mygem
的文件夾中運行服務器的時候,我有以下
source 'https://rubygems.org'
gemspec
gem "kss", :path => "/Users/me/code/kss"
現在,它的工作原理與預期完全一樣:不是取出kss依賴項,而是在我的本地驅動器上查看並加載該版本。
當我將mygem
添加到Rails測試應用程序Gemfile時,問題就出現了。在我的Rails測試應用程序的Gemfile,我有以下行:
gem "mygem", :path => "/Users/me/code/mygem"
我所期望的,在一個bundle install
,那捆紮機將加載mygem
和它的依賴;但對於kss
依賴關係,Bundler實際上並沒有加載本地依賴項,而是取出到rubygems來查找並加載它。我假設,因爲在這種情況下,它只是從gemspec行讀取,不包括我的依賴覆蓋。
有什麼我可以做的,以解決這種行爲?我非常希望能夠在本地運行和測試這些東西,但Bundler似乎無法識別來自更高級別應用程序的依賴覆蓋。
如果我以錯誤的方式回答這個問題,我完全接受任何建議或更改。
嘿,這工作得很好!而對於開發來說,這是一個很好的解決方案。但是,如果我有'kss'分支,我需要使用'mygem'實際準備好生產時,我猜我需要指示用戶將這兩行添加到他們的Gemfiles中?用這種設置的方式,沒有其他方法通過gemspec文件添加這個分支依賴關係,對吧? – joeellis 2013-04-06 15:45:20
實際上,如果您將「真正」的寶石(沒有本地路徑)添加到您的gemspec中,它們應該在實現應用程序中優先,並按照您的意圖工作,而不需要額外的工作。如果您想在實施應用程序中使用本地寶石,只需將路徑添加到gem文件,如上所述,以「覆蓋」它。 – 2013-04-06 16:21:53
對,但除非我誤解了你,否則我將無法釋放依賴於'kss'分支的'mygem',而不會讓'mygem'的用戶在其實施應用程序的Gemfile中添加兩行(不是說這是一個很大的問題,除非我能解決問題才帶來一點麻煩),對吧? – joeellis 2013-04-06 19:14:43