衆所周知,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源創計劃”,歡迎正在閱讀的你也加入,一起分享。