在MacBook M1上安裝Rails的筆記以及遇到的坑

JiaHung Lin
程式筆記
Published in
7 min readOct 22, 2022

這篇文章主要紀錄在MacBook M1上安裝Rails的過程、還有踩到的坑,希望可以幫到跟我一樣苦苦掙扎的人XD。

從Rosetta開始

因為Mac M1改晶片的關係,所以可能要透過Rosetta來協助跑程式。實作方式就是先到下方右鍵點擊終端機→選項→顯示於Finder。

然後同樣右鍵點擊終端機,選取「使用Rosetta」打開。

然後記得要退出然後重新開啟,沒記錯的話這邊會有一連串的步驟,問你要不要安裝Rosetta,同時會幫你安裝好Xcode。安裝好後建議可以退出終端機再重開。

巨大的坑

這邊紀錄一下我踩到的坑。在新版(M1)的homebrew安裝的位置跟舊版的位置不一樣,M1的是在/opt/homebrew之下、舊版的是在/usr/local之下,所以一定要注意的是究竟安裝的位置正不正確。我這幾天花了很多時間在解,後來發現很大的原因是即便我設定了位置在/opt/homebrew之下,但有可能還是在/usr/local。建議跑看看 uname -m檢查作業系統是不是 arm64,否則的話會很可怕。

我一開始用終端機然後做了很多操作,用uname -m顯示是x84;但是另開iTerm2之後uname -m顯示是arm64……。後來重新用iTerm2之後一切就順多了。

安裝homebrew

如果你的路徑是對的話,應該可以用以下指令直接安裝homebrew

/bin/bash -c "$(curl -fsSL <https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh>)"

下指令之後,應該會跑出一長串的訊息,然後問你是否要安裝homebrew。但切記不要太快按下Yes、不要太快按下Yes、不要太快按下Yes!很重要所以說三遍。應該要長得像

先檢查homebrew安裝的路徑是不是/opt/homebrew,如果不是/opt/homebrew而是/usr/local/bin的話,那就會很麻煩,因為如果路徑錯誤的話接下來你就要準備邊哭邊debug了。

確定路徑是對的話就應該就可以無痛的安裝好homebrew,然後應該會叫你設定~/.zshrc裡設定(如果你沒用zsh,那應該是在~/.bashrc裡。

echo 'if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi' >> ~/.zshrc
source ~/.zshrc

接下來就會進入到安裝ruby的環節,可以看看是要用rbenv或是rvm,雖然本質上沒太大的差別。如果是用rbenv可以用以下的指令

brew install rbenv ruby-build

但系統也有可能跟你說要加上arch -arm64,所以會變成

arch -arm64 brew install rbenv ruby-build

Ruby2.7之前的舊版本裝不太起來

由於原先的專案是2.6.6的專案,但是在M1上似乎裝不太起來,花了很多時間也沒辦法。後來發現2.7.4是可以用的,所以現在local是直接改用2.7.4。目前還沒有細看2.7跟2.6的差異,但是可能先不改動server端,先湊合著用吧。

如果是用比較舊版本的ruby,可能會有比較長的debug情況,大家自己斟酌一下QQ。

安裝yarn nvm問題

跑webpacker需要yarn跟nvm,基本上照以下兩個指令跑就好了

brew install nvmbrew install yarn

但最後還會需要跑以下的指令

yarn install --check-files

沒記錯的話指令會跟你報錯,此時會說需要安裝python2。可以跑以下指令並指定PATH

brew install pyenv
pyenv install 2.7.18
export PATH="$(pyenv root)/versions/2.7.18/bin:$PATH"

接著重跑一次 yarn install —check-files 就可以了

postgresql運作問題

我安裝psql的步驟是參考這篇文章

brew install postgres
brew tap homebrew/services
brew services start postgresql

但是沒記錯的話會要求你安裝特定的版本,像是他要求我安裝postlgresql@14的版本,所以下以下指令安裝

brew install postgresql@14

接著可以像往常一樣啟動專案,但是如果你是用pg gem的話,可能會壞掉。出現如以下的錯誤訊息

PG::ConnectionBad - could not connect to server: Connection refused

會出現這個錯誤主要是因為沒有裝postgres以及版本錯誤。像是我跑的是postgresql14的版本,但是不知道為什麼跑不動。後來參考了這篇文章才找出答案,可以照著上面的做法跑一遍,應該就可以了。大致上就是14的版本會跑不動,改成安裝13的版本就可以了。

接著沒問題後記得跑以下指令把資料庫建起來,應該就沒什麼大礙了。

rails db:create:all

註:原先安裝時也一直遇到沒辦法安裝postgres的問題,有些人是說libpq的問題,可以參考這篇

openssl問題

在先前一直沒辦法安裝舊ruby的時候,也有很多人是說是openssl的問題。但我同樣是確認作業系統名稱沒錯之後就好了,如果有興趣的話可以參考這篇文章這篇

其他有趣的小發現

在uninstall homebrew時,會去檢查${homebrew_prefix_default}”這個變數,這個變數會根據macos的系統資訊吐出prefix_default的路徑。我就是覺得奇怪我homebrew明明都已經指定路徑在/opt/homebrew之下,但是解除安裝時一直跟我説找不到/usr/local下的資料夾。但好險我就是從這裡發現我的uname -m吐出來的不是arm64,所以再看要怎麼解。

註:還沒空設定vim,因為怕又要重新設定Q

參考文章

https://chawkeye.medium.com/macbook-silicon-m1-之rails環境大挑戰-80ce0e73df1

https://medium.com/fazla-think-tank/installing-ruby-on-rails-macbook-pro-m1-4272da855fb3

https://www.wafrat.com/homebrew-on-mac-with-m1/

https://stackoverflow.com/questions/68935932/install-python2-on-mac-with-m1-chip

https://blog.smittytone.net/2021/02/07/how-to-migrate-to-native-homebrew-on-an-m1-mac/

https://github.com/Homebrew/brew/issues/9177

https://medium.com/@ivanzhd/get-your-bash-profile-right-for-mac-m1-and-linux-48d6a70f55db

https://github.com/rbenv/ruby-build/issues/1691#issuecomment-983122764

--

--