こんにちは。
天気がよくて気分が良い!花粉がなければ。。
どうもハチマキです。
はじめに
最近MacBook Air(M1,2020)を購入したため、開発環境の構築を行いました。その時に発生したエラーの対処方法についてです。
今回のエラーは結構強敵で、エラー解消に数日費やしました。。そのため、解消方法について書いていきたいと思います。
環境
- Ruby 2.6.4
- Rails 5.2.4.4
- MacBook Air(M1,2020)
やりたいこと
サーバを正常に動かしたい
問題
ローカルサーバ起動後にアクセスすると「dyld: lazy symbol binding failed: Symbol not found」エラーが発生し、サーバが落ちる。。
原因
今回の原因は、環境構築時に発生した (ExecJS::RuntimeUnavailable)を解消するためにインストールしたmini_racerが原因でサーバが落ちていました。
エラーログ
% rails s => Booting Puma => Rails 5.2.4.5 application starting in development => Run `rails server -h` for more startup options Puma starting in single mode... * Version 3.12.6 (ruby 2.6.4-p104), codename: Llamas in Pajamas * Min threads: 5, max threads: 5 * Environment: development * Listening on tcp://localhost:3000 Use Ctrl-C to stop I, [2021-02-13T22:36:34.461153 #83088] INFO -- : Started GET "/" for ::1 at 2021-02-13 ・ ・ dyld: lazy symbol binding failed: Symbol not found: __ZN2v82V813InitializeICUEPKc Referenced from: /Users/ユーザ名/development_of_app//vendor/bundle/ruby/2.6.0/gems/mini_racer-0.3.1/lib/mini_racer_extension.bundle Expected in: flat namespace dyld: Symbol not found: __ZN2v82V813InitializeICUEPKc Referenced from: /Users/ユーザ名/development_of_app/vendor/bundle/ruby/2.6.0/gems/mini_racer-0.3.1/lib/mini_racer_extension.bundle Expected in: flat namespace zsh: abort rails s
解消方法
早速ですが、解決方法です。
インストールしたmini_racersをアンインストールし、その状態でbundle installするとExecJS::RuntimeUnavailableエラーが発生するので、 代わりのjs実行エンジンをインストールする必要があります。
ステップ1:インストールしたmini_racerを元に戻す
Gemfileファイル
#gem 'mini_racer', platforms: :ruby #コメントアウトを戻す
ステップ2:libv8をインストールする(環境に応じて必要なv8を提供してくれる)
% gem install libv8 -v '3.16.14.19' -- --with-system-v8 Building native extensions with: '--with-system-v8' This could take a while... Successfully installed libv8-3.16.14.19 Parsing documentation for libv8-3.16.14.19 Installing ri documentation for libv8-3.16.14.19 Done installing documentation for libv8 after 0 seconds 1 gem installed
ステップ3:v8をbundlerが読むように設定する
$ bundle config build.libv8 --with-system-v8
ステップ4:v8をインストールする(jsの実行エンジン)
% brew install v8 ==> Downloading https://homebrew.bintray.com/bottles/v8-8.8.278.15.arm64_big_sur.bottle.tar ==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/70e65168b14df8f2e40598467ae15c50 ######################################################################## 100.0% ==> Pouring v8-8.8.278.15.arm64_big_sur.bottle.tar.gz 🍺 /opt/homebrew/Cellar/v8/8.8.278.15: 80 files, 39.9MB Removing: /Users/ユーザ名/Library/Caches/Homebrew/v8--8.8.278.14.arm64_big_sur.bottle.tar.gz... (12.6MB)
ここまでたどり着くのが長かった。。
最後にbundle installしてからサーバを起動したところ、正常にサーバが起動しました。
お疲れ様でした。