Macbook Silicon M1 之Rails環境大挑戰

Wells Zheng
7 min readFeb 26, 2021

--

手上的生財工具是剛加入Alphacamp大航道課程買的Macbook Pro 8G/256G,說實在的那少到可憐的記憶體只要我工作的時候幾乎都是90%以上的使用率,速度真的很慢,剛好今年Apple出了個很香的M1,打鐵趁熱在上個禮拜拿到了,沒想到要讓他能夠可以開始工作居然花了那麼多時間,所以紀錄一下目前在M1的機器上安裝好Rails開發環境的一些步驟。

在還沒拿到機器的時候國外的論壇就有滿多討論因為晶片組的問題,部分的軟體可能會不能跑,看看這個Ruby有那麼多外掛C函式庫,想來問題一定很多,果不其然路途坎坷,先從這一篇開始參考,有提到因為晶片組換掉,所以執行需要用到Rosetta來跑,大部分的文章也都是這樣寫,不過後來看看其實都是兩個月前的教學了,以目前的狀況(我安裝好的時候是2021二月底了),要安裝好Rails的環境並且可以跑可以不需要開Rosetta Terminal來下指令,直接開啟Terminal,首先先把xcode-select裝起來(Rosetta雖然後面我都沒打開,不過在這裡我也是先安裝起來了,指令如下)

xcode-select --install            # 安裝xcode-select
softwareupdate --install-rosetta # 安裝Rosetta2

接著安裝homebrew,直接從這裡找到安裝的script

Homebrew

# 安裝homebrew
> /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# 接著把路徑變數處理好
> echo 'eval $(/opt/homebrew/bin/brew shellenv)' >> /Users/wells/.zprofile
> $(/opt/homebrew/bin/brew shellenv)
> echo "export PATH="/opt/homebrew/bin:$PATH"" >> ~/.zshrc
> source ~/.zshrc

執行後ARM版本的homebrew會安裝在/opt/homebrew/,homebrew本身是支援在ARM的平台上跑的,不過官方有說了部分的套件可能會無法編譯。

接著先來搞定開發Rails需要的東西,什麼oh-my-zsh和編輯器之類的最後再說。

Ruby

原本的M1上已經預先裝好了Ruby 2.6版,不過這裡我會使用rvm來控制ruby的版本,所以先來安裝rvm,一樣到官網上直接找到安裝的script

# 安裝rvm
> \curl -sSL https://get.rvm.io | bash -s stable
> source /Users/wells/.rvm/scripts/rvm

接著就可以利用rvm來裝Ruby了,這裡使用的是2.7.2版

> rvm install 2.7.2

應該能夠正常的安裝完畢,接著就可以用gem install rails來安裝你想要的rails版本了

資料庫

資料庫的安裝據說PostgreSQL安裝上最沒有問題,直接用brew裝就可以了,筆者安裝的時候是使用mariadb,使用homebrew也能夠正常的安裝使用,版本是10.5.9。至於mysql嘗試了8.0和5.6基本上都是悲劇,其中發生很多不同的問題就不多提了因為都沒解決,所以還是使用mariadb,一樣用homebrew就可以了

> brew install mariadb
> brew services start mariadb
> sudo /opt/homebrew/bin/mysql_secure_installation

順便把redis也裝起來

> brew install redis
> brew services start redis
> redis-cli ping
=> PONG

Node && Yarn

node目前15版有支援M1晶片了,筆者是使用nvm來管理,所以一樣用brew來裝nvm和yarn

> brew install nvm
> brew install yarn

之後再使用nvm來裝15版的node

> nvm install 15

到這裡其實只要靠brew就能夠順利裝好90%以上的軟體了,但一開始因為查文章都是說要用rosetta來轉x86安裝,所以有的用rosetta有的沒用的狀況下,到最後環境就是被搞亂完全跑不起來。如果你跟我一樣想說那就Recovery重來就好,剛好踩到目前M1機器的Bug,只要你用了recovery就會讓你的MAC變磚開機了也進不去,最後只好用舊的機器來恢復,如果不幸地跟我一樣變磚了,參考這裡吧!網路上也有滿多影片教你如何進入DFU模式,這裡就不贅述了。

下載專案

接著就來把專案弄到新的電腦上吧,有裝過xcode-select之後就已經有git了,先來設定好git

> git config --global color.ui true> git config --global user.name "YOURNAME"> config --global user.email "YOUREMAIL"> ssh-keygen -t rsa -C "YOUREMAIL"# 然後把你的public SSH KEY貼到Github裏,這裡就不教學了
# 測試一下
> ssh -T git@github.com
# 沒問題的話應該會得到下面的這段回覆
=> Hi 你的帳號! You've successfully authenticated, but GitHub does not provide shell access.
# 接著抓回你的Rails專案
> git clone git@rails_project.git
> cd rails_project
> bundle install

在bundle install的時候會有幾個問題,首先是ffi這個gem,因為使用到了C的函式庫,所以需要更新到最新,在你的GemFile裡面加入

gem 'ffi', github: 'ffi/ffi'

這樣就能夠正確的安裝好ffi。

接著是mysql2這個gem,如果資料庫是使用mysql的,記得前面的mariadb要先安裝才能夠來裝這個gem,安裝指令是

> gem install mysql2 -v '0.5.3' -- --with-ldflags=-L/opt/homebrew/opt/openssl/lib --with-cppflags=-I/opt/homebrew/opt/openssl/include# 版本自行調整,主要需要把openssl的位置加進去flag裏,這樣才能夠正確地抓到對應platform的函式庫

最後,如果專案跟我一樣有用到webpacker的

> yarn install> rails s
> bin/webpack-dev-server

就可以開心的看到local server啟動的訊息了~~~~

Go

Go在1.16就支援了M1,剛好筆者安裝的時候上版了,所以一樣無痛brew裝起來

> brew install go

Docker

至於docker因為底層還有虛擬機,目前官方有預覽版可以下載來用,如果不是跑x86的image的話應該是可以正常運作的,至少我跑了elasticsearch和mysql都是正常的

拉哩拉雜的

最後其他的像是oh-my-zsh啦,vscode等等的都是無痛安裝,可以正常使用,就不多寫安裝方式了,唯一要注意的是vscode的terminal如果要用最好要設定好不要讓他跑rosetta的模式,筆者因為第一次裝的時候先裝了vscode然後用到rosetta裝了一部分的gem,最後環境就整個無法運作,切記啊~~

目前使用上因為才剛裝好沒幾天,沒什麼特別的,但跟原本舊機器比起來真是太香了~~~

--

--