2012-02-20 32 views
6

我們的團隊有幾個人,其中任何一個人都可能在任何寶石組合上工作。目前,我們的Gemfile有這樣的東西:Gemfile:爲多個開發人員有條件地聲明本地或遠程寶石的更好方式

gem 'awesome-gem', :git => '[email protected]:somebody/awesome-gem.git' 
# gem 'awesome-gem', :path => '/Users/developer-A/workspace/awesome-gem' 

# gem 'rad-gem', :git => '[email protected]:somebody/rad-gem.git', :branch => 'release' 
gem 'rad-gem', :path => '/some/path/specific-to/developer-B/rad-gem' 

所以開發商-A正在對真棒寶石本地,當他們完成了,他們剛剛更換了:路寶石的:git的位置,並承諾既版本控制。 developer-B和C爲rad-gem做同樣的事情,每個在其本地修改的Gemfile中都有一個不同的路徑,並且如果每個Gemfile都有真正的變化,他們必須撤消它們的本地路徑設置,提交,撤銷以指向返回到他們的本地版本RAD-寶石等

這既是一種疼痛和醜陋,所以我試圖拿出一個更好的解決辦法,但我能想出的最好的是這樣的:

if ENV['RADGEM_PATH'] 
    gem 'rad-gem', :path => ENV['RADGEM_PATH'] 
else 
    gem 'rad-gem', :git => '[email protected]:somebody/rad-gem.git', :branch => 'release' 
end 

這使開發人員B和C可以設置他們自己的放射線路徑,同時消除上面提到的很多痛苦。然而,它仍然是醜陋的,我想知道是否有更好的方法來做到這一點,可能使用組?

回答

8

更新(電流)

最近更新現在bunder提供local git repos。這是解決這個問題的最新方式。謝謝sekrett

更新(過時)

如果你有捆紮機> = 1.2,現在有一個better way to do this。例如,

bundle config local.blog ~/Work/gems/blog 

原來的答覆(過時)

在RSpec的核心團隊我的一個朋友給我看了the approach they used in the rspec-core Gemfile,所以我想我會使用它。

+0

文檔的URL現在是http://gembundler.com/v1.2/man/bundle-config.1.html#LOCAL-GIT-REPOS – cbliard 2013-12-26 16:13:41

+0

現在它位於:http://bundler.io/v1 0.2 /人/捆綁config.1.html#LOCAL-GIT-REPOS – sekrett 2017-03-31 07:10:34

0

難道你不能在開發中使用一個隱藏文件(.my_local_gems)作爲該用戶機器上gem位置的動態Gemfile嗎?或者你甚至可以使用像GEMS_DEVEL_HOME這樣的變量的一些環境變量?無論哪種方式,它都會強制每個人保持所有當地寶石的最新狀態,並在生產或分期中正常的Gemfile生效。

請記住,Gemfile只是ruby,所以你可以在其中包含各種代碼,而不僅僅是捆綁器特定的習慣用法。

相關問題