MacOS 安裝 Jekyll 踩過的坑
在 MacOS 上做開發一直是很愜意的一件事情,因為是 Unix-like 系統在環境的搭建方面有著很多便利,但在安裝 Jekyll 時卻遇到了不少坑,這裡記錄下。
一、安裝
安裝之前先要確認下安裝的環境,需要先安裝 Xcode、Ruby,雖然 MacOS 自帶 Ruby,但版本比較低(2.3.0),所以我還是手動安裝了一個最新版的 Ruby:
brew install ruby
並配置環境變數,.bash_profile
:
export PATH=$PATH:/usr/local/Cellar/ruby/2.5.3_1/bin
接下來按照官方文件執行安裝命令:
sodu gem install bundler jekyll
這個時候出現報錯:
ERROR:Error installing jekyll: ERROR: Failed to build gem native extension. ......
查了下ofollow,noindex">stackoverflow ,是缺少 Xcode-select 工具,可以用以下命令安裝:
xcode-select --install
再次執行 jekyll 安裝命令,安裝完成。
二、執行
安裝好 jekyll 後習慣性的執行jekyll -v
命令來檢視是否安裝成功,發現報錯:
-bash: jekyll: command not found
根據經驗應該是環境變數沒配好,查了下文件(對 Ruby 確實不太瞭解,囧),可以用gem env
命令檢視 gem 包的安裝目錄,然後手動添加了 jekyll 的環境變數,.bash_profile
:
export PATH=$PATH:/usr/local/Cellar/ruby/2.5.3_1/bin:/usr/local/lib/ruby/gems/2.5.0/gems/jekyll-3.8.5/exe
執行jekyll -v
返回jekyll 3.8.5
,說明配置成功,接著按照文件執行專案初始化命令:
jekyll new my-awesome-site
執行過程中再次報錯:
Installing eventmachine 1.2.7 with native extensions Gem::Ext::BuildError: ERROR: Failed to build gem native extension
原以為只是簡單的安裝失敗,所以按照提示,手動安裝了 eventmachine:
gem install eventmachine
再次執行專案初始化命令,但還是報錯,於是檢視詳細的錯誤日誌,發現 eventmachine 編譯需要 Ruby 2.4 以上版本,而我的 Ruby 編譯是 2.3.0,2.3.0 應該是 MacOS 自帶的版本,這就非常奇怪了,我明明安裝了 2.5.1 版本,配置也OK(which ruby),並且手動安裝 eventmachine 也成功了(gem list),怎麼這裡卻是是用的老版本的 Ruby...,查了不少資料後還是無法解決,最後決定安裝 rvm 試試能否曲線救國。
三、安裝 RVM
RVM 是 Ruby 的版本管理器,因為 rvm 安裝需要安裝公鑰而 Mac OS X 不附帶 gpg,所以先安裝 gpg:
brew install gnupg
接著安裝 mpapis 公鑰
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
提示公鑰伺服器不可用
,想了想難道是被牆了?於是為終端設定了下代理export http_proxy=sock5://127.0.0.1:1080
,安裝完成,如果沒有梯子或者設定有問題,可以嘗試以下命令:
curl -sSL https://rvm.io/mpapis.asc | gpg2 --import -
最後安裝 rvm:
\curl -sSL https://get.rvm.io | bash -s stable
需要注意的是安裝過程中某些域名還是需要梯子才能訪問,然後 rvm 會自動安裝最新版本的 Ruby,全部安裝完成後可以執行rvm list
命令檢視當前所用 Ruby 版本,可以看到是最新的 2.5.1:
=* ruby-2.5.1 [ x86_64 ] # => - current # =* - current && default #* - default
再次嘗試 jekyll 生成新的專案:
jekyll new my-awesome-site
執行成功!
至此 jekyll 安裝完成,基本上能踩的坑都已經踩了吧。。。相比熟悉的 NodeJS 確實要折騰很多。