[筆記]Ruby的RVM,GEM,Bundler是什麼?

| Comments

初入門Ruby on Rails的時候在做環境設定時

我們總是會遇到RVM,GEM,Bundler這幾個東西

都知道他們是管理套件相關的東西,但都傻傻分不清楚他們到底在管理什麼

今天就來整理一下

RVM

這個東西是用來管理Ruby這個程式語言版本的套件

由於Ruby有很多個版本,比如1.8.X~2.3.X

還有嵌入式系統用輕巧的mruby

或是jruby等等

這麼多ruby的版本如果搞不清楚什麼時候用什麼版本或是切換版本就很麻煩

所以就有這套RVM來做Ruby的版本管理

安裝方法可以直接到他們官網

將那一串指令貼到終端機上就能安裝了

安裝完後

我們可以使用上面剛安裝好的RVM來安裝其他版本的Ruby

例如我想安裝2.3.0的Ruby可以這樣下

1
    $ rvm install 2.3.0

裝好之後

我們可以下

1
2
3
    $ ruby --version
    //或是
    $ ruby -v

得知目前使用ruby的版本

那我想知道ruby的位置在電腦的哪邊

可以下

1
    $ which ruby

因為我們是用rvm管理ruby的關係

所以路徑會是~~~/.rvm/rubies/ruby-2.3.0/bin/ruby >之類的

可以看到ruby不同的版本都會放在~~/.rvm/rubies 這個路徑下

要打開該路徑資料夾

可以用open的指令

以我的為例

1
    $ open /Users/sayaku/.rvm/rubies

就可以看到剛剛下載的ruby-2.3.0的資料夾

Gem

在Ruby的世界,有很多用Ruby寫成的套件包或是框架可以用

才能造就Ruby這個程式的多樣與豐富性,例如有名Rails就是ruby的套件

那我們要怎麼找尋這些套件並且管理呢?

而Gem就是用來搜尋套件用與管理的玩意

其實我們在安裝Ruby的時候就會內建Gem

用rvm下載ruby的話,Gem的預設位置會在.rvm/gems

而使用gem下載的套件則會安裝到.rvm/gems/{ruby版本}

而要搜尋gem裡面有什麼套件,可以到rubygems的官網搜尋

例如我們想要下載rails這個套件

可以在終端機下指令

1
    $ gem install rails

這樣就會幫你把rails下載到預設的gems資料夾裡

Bundler

bundler也是ruby的套件,可以從gem上面下載

他是用來解決gem套件相依性問題的套件

這樣講好像有點不清楚

這樣說好了,每一個套件的作者,可能每一段時間就會為這個套件推出新的版本

所以即使是rails這個套件也會有很多版本(目前穩定版4.2.6)

而套件有很多個版本在專案上就會有套件版本管理上的問題

例如有一個A專案,他使用B套件(1.0.0版),而這個B套件會用到C套件(1.0.0版)

今天客戶可能搬到新的主機了

主機上也有其他專案,但是用B套件(2.0.0版),然後這個B套件會用到C套件(2.0.0版)

這時候A專案搬到新主機可能就沒辦法RUN

因為A專案需要用到B套件的1.0.0版,如果只是單純幾個套件那還好改,但通常每個套件都會在用到其他好幾個另外的套件

其他的套件只要版本不符可能都會跑不起來,就會有每個套件版本相依性的問題

而Bundler則是解決這個問題的套件

使用gem安裝bundler

1
    $ gem install bundler

裝好以後,你可以在你的專案資料夾下

1
    $ bundle init

他會在你的專案資料夾下創一個Gemfile的檔案

你可以在Gemfile裡面聲明專案會用到的RubyGems套件

並且定義在專案裡這些套件要使用的版本

定義好了以後

使用

1
2
3
    $ bundle install
    或是
    $ bundle

bundler會依照Gemfile所定義的RubyGems套件去下載

並將當前所有套件的版本做一個快照檔Gemfile.lock存起來

未來專案bundle會根據Gemfile.lock快照決定Gemfile是否有修改來進行套件的更新

而Gemfile的寫法細節可以參考龍哥

使用bundler就不用去煩惱哪個套件用到哪個版本的其他套件

很方便

Comments