2013-06-11 96 views
2

我目前有幾個運行版本3.2.13的Rails應用程序使用Ruby 1.9.3。我計劃最終將當前的應用程序升級到Rails 4.0,然後將Ruby升級到2.0。我需要仔細考慮轉換到Ruby 2.0,因爲從我的理解來看,Phusion Passenger只能處理一個版本的Ruby,而沒有一些鼻子流血的解決方案,我現在不打算嘗試實現。Ruby On Rails 3.2.13 - 爲Rails應用程序使用不同的gemsets

我目前對我所有的Rails應用程序使用一個gemset。我想在某些時候將我的Rails應用程序從3.2.13逐一轉換爲當前版本的Rails 4.0。當我試圖將我的一個應用程序更新到更新版本的Rails時,我被告知必須執行更新rails命令。

我想要做的就是能夠使用Rails 3.2.13和其他使用Rails 4.0的應用程序來運行我的一些應用程序,直到我確信它們都將在Rails 4.0下正常運行。一旦我這樣做,我會回顧Ruby 1.9.3(如果有的話)之間的差異,並將其全部升級爲使用Rails 2.0。在這一點上,我明白,我只會創建2.0.0的gemset或任何最新的穩定版本的Ruby 2。

我已經完成網絡搜索並檢查了RVM網站。我瞭解如何將gemset分配給您要運行的Ruby版本。然而,我沒有看到任何關於在同一版本的Ruby上使用gemset,但在同一臺機器上爲不同的應用程序使用不同版本的Rails或其他寶石組合。這可以做到嗎?

任何幫助,將不勝感激。

+0

[RVM指導](https://rvm.io/gemsets/basics/)在第一個示例中解釋了您正在討論的內容。 –

+0

這解釋瞭如何爲不同版本的Rails創建不同的gemset,但並未解釋如何識別每個應用程序使用哪個gemset。也許我錯過了一些東西。 –

回答

0

您的Gemfile.lock會指出您使用的每個寶石版本 - 您無需擔心寶石集。

bundle install將始終安裝正確的版本和您的應用程序將始終使用的版本Gemfile.lock的,即使有其他版本的左右浮動

+0

我更喜歡用自己的方式來使用bundler來管理我的寶石,但是它確實意味着如果你有多個版本的寶石,你就必須使用'bundle exec' - 值得一提。 –

+0

只是澄清:要更新我的應用程序之一來使用Rails 4.0,我所要做的就是更改我的Gemfile中的Rails版本以及添加Ruby版本號,然後執行bundle exec?我想確保這將允許我在不同的應用程序中運行Rails 3.2.13和Rails 4.0。 –

+0

'bundle install' /'bundle update'來更新你的包中的內容,否則是。 bundle exec用於當你想從gems運行可執行文件(例如bundle exec rails g migration Foo) –

2

仔細看看! ;)

首先,創建一個新的寶石與對應的項目名稱 https://rvm.io/gemsets/creating/ 例如:rvm gemset create project_name

然後創建項目目錄/編輯.rvmrc文件:rvm use [email protected]_name

一個缺陷是,如果你執行下面的命令

cd some_project 
cd ../other_project 

和other_project沒有指定gemset你會留在some_project ge MSET。爲了避免這種情況,你可以在你的「項目」目錄中創建默認寶石.rvmrc文件(如果有的話)

+0

我目前沒有在我的項目中使用.rvmrc。這可能解釋我剛發現的其他東西。我的嘗試是爲我所有的Rails應用程序使用一個gemset,但是在列出gemsets之後,我發現我無意中創建了其他的gemset。看起來我的寶石已經失控。我可以在這裏嘗試另一種選擇。 –

+0

你也可以看看rbenv。就我個人而言,我有完全不同的方法,因爲我所有的應用程序都是Ruby 1.9.3。 我告訴bundler在project_dir/.gems中安裝gems,因此對於每個項目,我默認情況下都有gem分離。請參閱https://github.com/hajder/bootstrap-ruby-on-your-mac,但尚未完成 –

1
Project Folder 
|___Gemfile 
|__.ruby-gemset 
|__.ruby-version 

Gemfile with all the required gems mention in your project folder 
.ruby-gemset should have gem set name like sample-gemset 
.ruby-version file should have specific ruby version (e.g 2.0) 

rvm gemset list 

,它會顯示與樣本寶石創建寶石一套,做

捆綁安裝

這將安裝所有特定的寶石下采樣寶石這個項目, 同樣可以用於其他項目做創建其他寶石,這樣你可以使用rvm爲不同的項目維護不同的rails/gem和ruby版本。