1
0

More than 3 years have passed since last update.

M1 Mac でRailsコマンドが使えなくなった時のメモ

Last updated at Posted at 2021-08-12

M1 Mac で rbenv 経由で Ruby3.0.2 を入れたらrailsコマンドが以下のエラーで打てなくなった

terminal
$ 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を消したら治った?

.bash_profile
export PATH="/usr/local/bin:$PATH" # これを消した

よくわからないが.bash_profileの上記PATHを消してsource ~/.bash_profilegem 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が使われなくなってしまう模様。

関連コマンド一覧

terminal
# 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

参考になりそうな記事

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0