2011-12-03 69 views
4

與大多數Rails開發人員一樣,我的系統上有很多Rails應用程序 - 運行不同版本的Rails。結果,我現在有了Rake的多個版本(0.8.7和0.9.2)。多個Rake版本 - 最佳實踐

每個應用程序都部署在自己的VPS上,只運行一個版本的Rails和一個Rake版本。

此外,這些項目上還有其他開發人員有自己的設置,他們可能有也可能沒有相同(或兩個)版本的Rake。

對此進行管理的最佳做法是什麼?

我應該在我的Gemfile中指定一個Rake版本(對於Rails 3應用程序,使用Bundler)?如果我這樣做,那麼我總是需要bundle exec rake,這很好 - 但我不知道現在是否是標準。每個人都必須這樣做嗎?有沒有辦法避免它?

此外,as noted elsewhere,我有

require 'rake/dsl_definition' 
include Rake::DSL 

更新我的Rake文件,如果我想用耙0.9.2。即使這樣,我得到這些警告:

/Library/Ruby/Gems/1.8/gems/rake-0.9.2/lib/rake/file_utils.rb:10: warning: already initialized constant RUBY 
/Library/Ruby/Gems/1.8/gems/rake-0.9.2/lib/rake/file_utils.rb:84: warning: already initialized constant LN_SUPPORTED 

我應該只在我的Gemfile中指定0.8.7?看來我應該可以使用0.9.2。

我(a)需要服務器上的應用程序在沒有bundle exec的情況下工作,像rake db:migrate這樣的簡單工作,以及(b)需要與其他開發人員很好地協作的東西。

人們如何處理?什麼似乎運作良好?什麼不?

任何反饋將不勝感激!

回答

3

使用捆綁包並使用bundle exec rake調用正確的版本幾乎是不錯的選擇。也就是說,輸入所有這些都會變得很快。

你可以做的是bundle install --binstubs它將包括你使用的寶石的可執行存根。然後你可以簡單地調用(例如)bin/rake cucumber:ok

4

如果你使用RVM和gemsets,你可以避免bundle exec問題。

例如,我製作的每個應用程序或項目都有自己的gemset。

用法示例:

rvm use 1.9.2; rvm gemset create foobar 

然後在.rvmrc文件的應用程序:

rvm use [email protected] 

這將使RVM使用正確的寶石,你不會有版本衝突或使用捆綁EXEC對被卡住生活。

一旦創建了.rvmrc文件不要忘了光盤拿出來,然後回或發出

rvm reload 

開始使用新的寶石