場(chǎng)景描述
- 直接使用了本機(jī)上的ruby,并且安裝了gem和bundler,打開(kāi)項(xiàng)目,使用
bundle install想著安裝一些Gem(一些依賴(lài)包)卻發(fā)現(xiàn)不停的讓我使用sudo,感覺(jué)這樣不對(duì)。 - 然后放棄了本機(jī)上的ruby改用
rbenv安裝新的ruby,但是使用沒(méi)有辦法修改which ruby時(shí)候指向的/usr/local/bin/ruby - 不論使用的bundler還是Gemfile都使用的
/usr/local/bin中的
RubyGems
是什么: Ruby程序包管理器,等同于mac上的
brew或者gradle。-
作用:管理所有使用ruby封裝的程序和代碼,簡(jiǎn)單的說(shuō)是管理Gem包
- Gem : Gem是封裝起來(lái)的Ruby應(yīng)用程序或代碼庫(kù)(等同于npm中的一個(gè)依賴(lài)),但是每一個(gè)Gem都是用ruby編寫(xiě)的
- 管理的內(nèi)容:構(gòu)建、上傳、下載以及安裝Gem包
-
如何使用:ruby下載的時(shí)候就會(huì)自動(dòng)下載RubyGems,所有的RubyGems命令都是通過(guò)
gem實(shí)現(xiàn)的-
gem list --local: 列出已安裝的gem -
gem list --remote: 列出可用的gem -
gem install **: 安裝某個(gè)gem -
gem uninstall **: 卸載某gem
-
bundler
幫助你指定你的項(xiàng)目需要使用哪些 gem(Gemfile),還有可選地指定哪個(gè)版本被需要
當(dāng)聲明恰當(dāng)時(shí),Bundler 會(huì)安裝所有依賴(lài)的 gem (包括整個(gè)依賴(lài)樹(shù)),后期檢查之后還會(huì)打印出 log(bundle install)
-
Bundler 默認(rèn)是安裝 gem 到一個(gè)共享的路徑,不過(guò)也可以指定直接安裝到你的應(yīng)用
- 注意:在項(xiàng)目中可以創(chuàng)建一個(gè)
.bundle目錄下面可以創(chuàng)建一個(gè)config文件,文件中可以定義gems安裝的位置- 當(dāng)你使用
sudo bundle install就會(huì)默認(rèn)的在項(xiàng)目目錄下創(chuàng)建這個(gè)config并將gem存放在項(xiàng)目的vendor目錄下,因此千萬(wàn)不要使用sudo bundle install
- 當(dāng)你使用
- 注意:在項(xiàng)目中可以創(chuàng)建一個(gè)
在應(yīng)用中,安裝的可執(zhí)行g(shù)em需要以 bundle exec gemName命令運(yùn)行只有這樣才是真正使用bundle安裝的gem
gem install 和 bundle install的區(qū)別
gem install
- 使用RubyGems安裝gem
- 安裝完之后會(huì)將gem存放在
$HOME/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems下- 這個(gè)目錄下的
gems目錄中主要存放的是解壓之后的gem,當(dāng)安裝過(guò)程中遇到問(wèn)題時(shí),可以進(jìn)入這些目錄,把有問(wèn)題的gem刪掉,重新 gem install 即可 - 這個(gè)目錄下的
cache下放置下載的原生gem包
- 這個(gè)目錄下的
bundle install
- bundle install 默認(rèn)情況下也是將所需要的gem安裝到這個(gè)位置