攝影師:Tima Miroshnichenko: https://www.pexels.com/zh-tw/photo/html-5380664/

[Ubuntu] 使用 RVM 安裝 Ruby

這篇是我搬運自己以前在 GitHub Pages 上 2020 年 7 月的文章。

背景故事是發生在我需要使用 Ruby 環境架設 Jekyll 生成的網站,但在 Ubuntu 作業系統中處理時不太順利,因此產生了這一則筆記。


首先必須講,盡量不要用 sudo apt-get install ruby 這個指令安裝。有在 Ruby 社群的應該曾被建議過不要使用套件管理工具來安裝,原因是這個會安裝一個穩定但是老舊的版本(好像是2.3.?)。而我是為了 Jekyll 而安裝,那時它就有跑出錯誤訊息說 Ruby 需要 2.4.0 的版本。所以導致我整個砍掉重練……

(可惜錯誤訊息被我洗掉了,不然可以給往後的我留作紀念)

既然不用套件管理工具,那該拿什麼來安裝?根據網路上大神們的說法:「若系統或套件管理員提供的 Ruby 版本過時的話,可以使用第三方的安裝工具來安裝。」因為我玩這個系統還不夠久,一知半解的狀態下直接選擇 RVM,這個有內建版本控制。

安裝 RVM

官網是這麼寫的:

gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
\curl -sSL https://get.rvm.io | bash -s stable
\curl -sSL https://get.rvm.io | bash -s stable --rails

不過我當時誤打誤撞找到 RVM package for Ubuntu

sudo apt-add-repository -y ppa:rael-gc/rvm
sudo apt-get update
sudo apt-get install rvm

更改終端機視窗

不太確定這個的用意,先記錄。

echo 'source "/etc/profile.d/rvm.sh"' >> ~/.bashrc

重啟系統

這裡超級重要,當時看教學只有文字,就下意識跳過這個步驟,連 reboot 關鍵字都沒看到。  

關於原因,文件是這樣說的:

scripts that needs to be reloaded, you’re now member of rvm group

總而言之就像有的東西更新完了會要求重新啟動那樣,這個也是類似的概念。我當時忽略的結果,就是不管怎麼輸入 rvm install ruby,它總是會出現錯誤訊息:

There has been an error fetching the ruby interpreter. Halting the installation.

有趣的是,好像蠻多人和我一樣直接忽略這個步驟XD 喔對了,這個筆記不是即時記錄,有些事情發生順序有點搞混了。  看草稿有記錄到這個錯誤訊息:

rvm command not found

用了以下的方式解決:  

(if using login-shell)

echo "source $HOME/.rvm/scripts/rvm" >> ~/.bash_profile

(if using non-login shell)

echo "source $HOME/.rvm/scripts/rvm" >> ~/.bashrc

這兩個問題不太確定誰先誰後,那時還真是一片混亂= =”

安裝Ruby

被前面問題搞得差不多了,開始安裝Ruby。

rvm install ruby

終於正常了,有夠感動。

安裝 Jekyll

先前提過我這次的目的其實是為了 Jekyll。  

sudo apt-get install ruby-full build-essential zlib1g-dev

設置一個 gem 安裝目錄,並配置環境變數:  

(說是要避免以 root 身份安裝Gems,這裡先記錄,之後看。)

echo ‘# Install Ruby Gems to ~/gems’ >> ~/.bashrc
echo ‘export GEM_HOME=“$HOME/gems”’ >> ~/.bashrc
echo ‘export PATH=“$HOME/gems/bin:$PATH”’ >> ~/.bashrc
source ~/.bashrc

最後就是 Jekyll 了:

gem install jekyll bundler

參考


後記

我比較驚訝的是原以為在 Ubuntu 上安裝會很順利,但接連幾個錯誤反而讓整個流程比在 Window 上操作還要耗時。那時光是忙著尋找解決方式,有很多小細節似乎沒記錄到 T-T  

讓我知道你在想什麼!