M1 Mac で rbenv 経由で Ruby3.0.2 を入れたらrailsコマンドが以下のエラーで打てなくなった
$ rails s
-bash: /usr/local/bin/rails:/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/bin/ruby bad interpreter: No such file or directory
$ rails -v
-bash: /usr/local/bin/rails:/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/bin/ruby bad interpreter: No such file or directory
$ which rails
/usr/local/bin/rails
# 現状の環境確認
$ which ruby
/Users/takuya/.rbenv/shims/ruby
$ which gem
/Users/takuya/.rbenv/shims/gem
$ which rails
/usr/local/bin/rails
.bash_profileのPATHを消したら治った?
export PATH="/usr/local/bin:$PATH" # これを消した
よくわからないが.bash_profileの上記PATHを消してsource ~/.bash_profile
しgem install rails
したら治った。この状態では
$ which rails
/Users/takuya/.rbenv/shims/rails
となってくれるが/usr/local/bin/rails
自体も存在する。ただrbenvを入れてる場合、SystemにインストールされたRubyはもちろんのことRailsも無視していいっぽい(rbenvで管理しているRailsの方が優先的に使われる?)
M1 Mac で node-sass が未対応問題
しかしrails s
するとyarn install --check-files
と言われ、実行するとnode-sass関係のエラーがでる。ググるとnode-sassがM1 Macに対応していないらしい。
error /Users/takuya/my-project/node_modules/node-sass: Command failed.
代わりにyarn remove node-sass
してyarn add sass sass-loader
して代用しろとの声もあったが、removeの時点で下記エラー。
error No lockfile in this directory. Run `yarn install` to generate one.
info Visit https://yarnpkg.com/en/docs/cli/remove for documentation about this command.
npm install sass sass-loader
しても、rails s
したときにlocalhost:3000
のブラウザ側に下記エラー。
Node Sass does not yet support your current environment: OS X Unsupported architecture (arm64)
応急処置
もうググり倒せど解決しそうにないので、nodebrewで元々入っていたNode.jsのv11.12.0に切り替えてることで解決させた。
$ nodebrew use v11.12.0
$ yarn intall --check-files
$ rails s # success
ただNode.jsのARM64(M1)対応はv16からなので、nodebrewを使ったとは言え旧バージョンを新しくインストール方法は謎(現にnodebrew install v14
してもダメだった)。
余談
yarnについて
npmとyarnがともにパッケージ管理マネージャーで、yarnはFacebookが開発したものとは知っていたが、yarnはnpmの上位互換的なソフトらしく、yarn自体はnpmで管理されるらしい。上位互換なのでpackage.jsonもnpmと共用できるようだ。
nodebrew
nodebrewはNode.jsのパッケージ管理ソフト。他にnvm, nodenvがある。紛らわしいがhomebrewはMacOSのパッケージ管理マネージャー。Node.jsをnodebrew経由で入れたつもりでも、homebrewでyarnを入れると自動的にNode.jsも入ってしまうらしい。こわい。
どうやらyarnをhomebrewでインストールのした際にnodeをインストールしてしまうみたい。
その際にnodeのPATHをyarnが使うnodeのPATHにしてしまうので、nodebrew側のnodeが使われなくなってしまう模様。
関連コマンド一覧
# rbenv入れ直し
$ brew uninstall rbenv
$ brew uninstall ruby-build
$ brew install rbenv
$ brew install ruby-build
# rbenvの状況確認
$ rbenv install --list
$ rbenv versions
# rails入れ直し
$ gem uninstall rails
$ gem install rails