2014-10-01 117 views
0

之間切換以下http://railsapps.github.io/installrubyonrails-mac.html,我遇到下面的命令澄清RVM和軌道

rvm use [email protected] --create 
gem install rails # installs the latest rails version 
rails -v # returns 4.1.6 

不過,我也可以做到以下幾點,這將增加版本導軌4.0.8

rvm use [email protected] --create 
gem install rails --version=4.0.8 # installs the latest rails version 
rails -v # returns 4.0.8 

這有什麼意義?在文中的某處,據說這種方法是爲了防止全局gem-set,而是根據項目特定的gemset安裝rails?那有什麼意思?

這是關於如何創建一個新的軌道的說明項目

$ mkdir myapp 
$ cd myapp 
$ rvm use [email protected] --ruby-version --create 
$ gem install rails 
$ rails new . 

爲什麼不叫軌新MYAPP?文字說這是「創建一個項目特定的寶石」,但我不知道這意味着什麼。這不會只安裝軌4.1.6(最新版本)?爲什麼不首先在全球安裝rails 4.1.6呢?

回答

2

想象你是在已做的Rails應用在過去的4年公司Rails開發。你有Rails 2,Rails 3,Rails 4上的應用程序 - 隨着新版本的出現,你升級你的工具集,原因何在?每個新版本都更好。

但是,它們不向下兼容。 Rails 2應用程序將無法使用Rails 4.1。如果你被要求緊急調試Rails 2應用程序而在Rails 4上進行黑客攻擊呢?卸載全局Rails,安裝Rails 2,進行黑客攻擊,然後卸載Rails 2並重新安裝新的Rails 2,以便您可以運行測試以進行單線錯誤修復?

這就是gemsets進來,你必須每個應用程序,以便每個應用程序可以運行自給自足,沒有版本衝突的環境。

如果你不想像你的機器上的版本衝突這樣的情況下(即,如果你只能想象在一個項目上工作),gemsets是完全不相干的。

編輯經過一番混淆仍然在評論:)讓我們一步一步,看看究竟發生了什麼。

$ mkdir myapp 
$ cd myapp 

你現在處於一個空目錄。

$ rvm use [email protected] --ruby-version --create 

RVM創建一個新的寶石,命名爲[email protected],這將使用Ruby 2.1.3運行。因此,你有一個新的目錄~/.rvm/gems/[email protected],你的寶石將在那裏。您還可以在你的前面空myapp目錄中的兩個新文件:.ruby-version(其中包含一條線說ruby-2.1.3)和.ruby-version(含線myapp)。每當您輸入myapp目錄時,這兩行都會被rvm讀取:它爲您設置當前的Ruby和gemset。

$ gem install rails 

在認識到目前的寶石現在是[email protected],該gem install命令將下載最新rails寶石,以及它所有的依賴關係,並把它們放在你的寶石目錄(~/.rvm/gems/[email protected]/)。

$ get install rails --version=4.0.8 

如果你試試這個,它會忠實地安裝Rails 4.0.8,但因爲你在你的寶石一個新的版本,你的應用程序沒有具體有什麼要求,更新的人會優先考慮。這通常不是你想要的;無論如何,很少有理由開發一個項目來遵守兩個不同版本的庫(除非你正在開發一個庫或一個插件;這是一個不同的故事)。

$ rails new . 

rails實際執行~/.rvm/gems/[email protected]/bin/rails。如果鏈接到gemset的目錄不在myapp目錄中,那麼該命令將失敗(如果您沒有在全局環境中安裝Rails),或執行全局安裝的Rails(如果已執行)。

所以,它並不是真的在同一個項目中同時擁有兩個Rails版本。但是當你使用另一個gemset(例如,[email protected])創建另一個項目時,你可能會有不同版本的Rails。該版本僅基於您將目錄cd轉換爲自動更改。

+0

感謝您的回覆!我想我更想知道爲什麼我需要我的問題的第一部分(rvm use ..... --create),當我似乎可以簡單地定義當我初始化項目時需要什麼rails版本? – user3277633 2014-10-01 05:39:46

+0

如何在初始化項目時定義你想要的Rails版本? Rails版本完全依賴於您正在運行的Rails - 全局環境中的Rails永遠都是相同的,gemset中的那個將是您在gemset中安裝的任何版本。 'rvm use ... --create'爲目錄創建一個gemset;在該目錄內任何對'gem install'的進一步調用都會將gem安裝到gemset中。這就是爲什麼你可以在兩個不同的目錄中有兩個不同的鐵路。 – Amadan 2014-10-01 05:41:36

+0

啊我覺得我開始明白這一點。這是否意味着當我打電話給$ rvm時使用[email protected] --ruby-version --create按照$ gem install rails我將兩個rails 4.0和4.1安裝到項目myapp中,並且可以在兩個之間自由切換? – user3277633 2014-10-01 05:44:47