2012-10-09 108 views
4

所以我知道,在一個Gemfile中,我可以做這樣的事情:的Gemfile - 從開發中分離生產的寶石寶石

group :development, :test do 
    gem 'gem1' 
    gem 'gem2' 
end 

我所希望做到的是這樣的:

group :production do 
    gem 'gem1' 
    gem 'gem2' 
end 

group :development, :test do 
    gem 'gem1', :path => '/Documents/Code/gem1/' 
    gem 'gem2', :path => '/Documents/Code/gem2/' 
end 

所以我們的應用程序使用了我們也在本地開發的2個寶石。爲了在我們的本地機器上開發時間更長,我們希望能夠將我們的開發環境指向本地的gem副本 - 通過這種方式,它可以在不需要重新啓動rails服務器的情況下完成所有更改。否則,我們將不得不重新構建寶石,重新安裝寶石,並在寶石的每次開發變化中重新開始導軌。

但是,這樣做給了我以下錯誤:

You cannot specify the same gem twice coming from different sources. You specified that gem1 (>= 0) should come from an unspecfied source and source at /Documents/Code/gem1 

我已經試過甚至運行像bundle install --without production,我也得到了同樣的錯誤。

有誰知道是否有可能做我想做的事情?

謝謝!

回答

5

我認爲有一個支持的方式來做到這一點,一些黑客來解決它。

支持方式:

使用bundle configlocal選項如下所述:http://bundler.io/v1.3/man/bundle-config.1.html

哈克的方式:

使用ENV VAR和在生產中使用之前執行捆綁:http://www.cowboycoded.com/2010/08/10/using-2-sources-for-a-gem-in-different-environments-with-bundler/

有是github上關於這個問題的一個功能請求,其中有幾個相關的問題和大量的評論:https://github.com/carlhuda/bundler/issues/396

+0

上述鏈接到'束config'文檔已經移動到:http://bundler.io/v1.3/man/bundle- config.1.html –

+0

@AdamFlorin thx,更新了答案 – phoet

5

github問題phoet掛接已解決,並且與支持的方式一致。

我在文檔中搜索,您需要設置配置變量並更新您的gemfile以引用分支。

例如在命令行

gem <gem_name>, git: <git_url>, branch: <branch> 

編輯您的Gemfile

bundle config local.<gem_name> <local_path_to_gem> 
0

我通過創建一個新的Gemfile這是除了目標寶石的來源等同於原來的解決了這個。然後,在配置/的boot.rb,我使用:

require 'rails' if Rails.env.development? ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../DevGemfile', __FILE__) else ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../ProdGemfile', __FILE__) end