Macbook Silicon M1 之Rails環境大挑戰
手上的生財工具是剛加入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,最後環境就整個無法運作,切記啊~~
目前使用上因為才剛裝好沒幾天,沒什麼特別的,但跟原本舊機器比起來真是太香了~~~