Mac上使用brew另裝ruby和gem的新玩法

衆所周知,Mac 開機自帶 ruby 環境,位於/Library/Ruby系統資源庫中,通過終端執行 ruby -v可以看到 ruby 的版本號:

% ruby -v
ruby 2.6.3p62 (2019-04-16 revision 67580) [universal.x86_64-darwin19]

不過平常我們使用 ruby 的時候不建議使用系統自帶 ruby 環境,因爲會對系統文件目錄進行讀寫,試錯成本太大,不適合個人學習使用。那問題來了,在這種情況下,我們如何玩轉 ruby 呢?

解決辦法:使用 Homebrew 安裝 ruby 。

Homebrew 的安裝複製官網提供的命令行執行即可:https://brew.sh

使用 Homebrew 安裝 ruby:

$ brew install ruby

安裝成功後,發現ruby的版本還是之前系統默認的:

% ruby -v
ruby 2.6.3p62 (2019-04-16 revision 67580) [universal.x86_64-darwin19]

不要急,這是因爲系統自帶的 ruby 環境級別太高,導致我們自行安裝的 ruby 環境失效。

解決方法(一)

筆者的解決辦法是找到 ruby 的安裝位置,直接略過環境變量執行 ruby 命令。

找到 Homebrew 的軟件安裝目錄:/usr/local/Cellar/

找到 ruby 的安裝目錄 /usr/local/Cellar/ruby/2.6.5

找到 ruby 的命令目錄 /usr/local/Cellar/ruby/2.6.5/bin/

在使用自行安裝的 ruby 時只需要帶上目錄前綴即可,示例:

% /usr/local/Cellar/ruby/2.6.5/bin/ruby -v
ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-darwin19]

使用 gem 的方式:

% /usr/local/Cellar/ruby/2.6.5/bin/gem -v
3.0.6

假設使用 gem 安裝瞭如 jekyll 的軟件,執行 jekyll 命令依舊無效:

% jekyll --version
zsh: command not found: jekyll

同理,只需要找到 jekyll 的命令目錄,那如何找到呢?

執行 gem env命令可以找到有效的幫助:

% /usr/local/Cellar/ruby/2.6.5/bin/gem env
RubyGems Environment:
- RUBYGEMS VERSION: 3.0.6
- RUBY VERSION: 2.6.5 (2019-10-01 patchlevel 114) [x86_64-darwin19]
- INSTALLATION DIRECTORY: /usr/local/lib/ruby/gems/2.6.0
- USER INSTALLATION DIRECTORY: /Users/username/.gem/ruby/2.6.0
- RUBY EXECUTABLE: /usr/local/opt/ruby/bin/ruby
- GIT EXECUTABLE: /usr/local/bin/git
- EXECUTABLE DIRECTORY: /usr/local/lib/ruby/gems/2.6.0/bin
- SPEC CACHE DIRECTORY: /Users/username/.gem/specs
- SYSTEM CONFIGURATION DIRECTORY: /usr/local/Cellar/ruby/2.6.5/etc
- RUBYGEMS PLATFORMS:
- ruby
- x86_64-darwin-19
- GEM PATHS:
- /usr/local/lib/ruby/gems/2.6.0
- /Users/username/.gem/ruby/2.6.0
- /usr/local/Cellar/ruby/2.6.5/lib/ruby/gems/2.6.0
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :backtrace => false
- :bulk_threshold => 1000
- REMOTE SOURCES:
- https://rubygems.org/
- SHELL PATH:
- /Library/apache-maven-3.6.1/bin
- /Library/redis-5.0.5/src
- /Library/Java/JavaVirtualMachines/jdk1.8.0_211.jdk/Contents/Home/bin
- /usr/local/bin
- /usr/bin
- /bin
- /usr/sbin
- /sbin
- /usr/local/MacGPG2/bin

找到 gem 的執行目錄即 EXECUTABLE DIRECTORY 爲 :

/usr/local/lib/ruby/gems/2.6.0/bin

嘗試執行 jekyll 命令:

% /usr/local/lib/ruby/gems/2.6.0/bin/jekyll --version
jekyll 4.0.0

驚喜的發現我們已經成功的執行了命令。

但是,如果你使用的是 jekyll 你會發現還是會有一些命令執行異常,因爲這些命令的執行過程中依舊使用的環境變量裏的 ruby 和 gem。

解決方法(二)

將自行安裝的 ruby 添加到環境變量中,並保證優先級大於系統自帶的 ruby。

系統的環境變量加載順序爲:

/etc/profile
/etc/paths
~/.bash_profile
~/.bash_login
~/.profile
~/.bashrc

依次通過 cat 命令查看,找到 /etc/paths中的 /usr/bin路徑中存放着系統的 ruby 命令執行程序,我們將 brew 安裝的 ruby 的 bin 目錄插入到/etc/paths文件的第一行:

% cat /etc/paths
/usr/local/opt/ruby/bin
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin

然後使用 source 命令使之生效:

% source /etc/profile

檢驗 ruby 是否切換成功:

% ruby -v
ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-darwin19]

可以看到,ruby 環境已經切換爲 brew 安裝的。

事情到這裏並沒有結束,還需要將 gem 安裝的軟件的執行目錄加載到環境變量中,通過執行 gem env可以找到 EXECUTABLE DIRECTORY 目錄的位置,和上面步驟相同,添加到 /etc/paths中:

% cat /etc/paths
/usr/local/opt/ruby/bin
/usr/local/lib/ruby/gems/2.6.0/bin
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin

使用 source命令使之生效即可。然後你可以放心使用ruby了。



版權聲明 :  凡未經本公衆號書面授權,任何媒體、網站及個人不得轉載、複製、重製、改動、展示或使用本公衆號原創文章的局部或全部的內容或服務。

本文分享自微信公衆號 - 代碼藝術(onblog)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章