Gem::Ext::BuildError: エラー: macOS Monterey で gem ネイティブ拡張機能をビルドできませんでした
概要
Rails 5 プロジェクトで Bundle install を実行すると、ネイティブ拡張機能があると思われる gem で多数のエラーが発生します。以下は、これらの gem の 1 つの出力の上部です。
Installing nio4r 1.2.1 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
checking for unistd.h... yes
checking for rb_thread_blocking_region()... no
checking for rb_thread_call_without_gvl()... yes
checking for sys/select.h... yes
checking for poll.h... yes
checking for sys/epoll.h... no
checking for sys/event.h... yes
checking for sys/queue.h... yes
checking for port.h... no
checking for sys/resource.h... yes
creating Makefile
current directory: /Users/<my-username>/.rvm/gems/ruby-2.7.4/gems/nio4r-1.2.1/ext/nio4r
make "DESTDIR=" clean
current directory: /Users/<my-username>/.rvm/gems/ruby-2.7.4/gems/nio4r-1.2.1/ext/nio4r
make "DESTDIR="
compiling monitor.c
monitor.c:91:24: warning: '(' and '{' tokens introducing statement expression appear in different macro expansion contexts [-Wcompound-token-split-by-macro]
if(interests_id == rb_intern("r")) {
^~~~~~~~~~~~~~
/Users/<my-username>/.rvm/rubies/ruby-2.7.4/include/ruby-2.7.0/ruby/ruby.h:1847:23: note: expanded from macro 'rb_intern'
__extension__ (RUBY_CONST_ID_CACHE((ID), (str))) : \
^
monitor.c:91:24: note: '{' token is here
if(interests_id == rb_intern("r")) {
^~~~~~~~~~~~~~
いろいろ試してみました。
この投稿に従って、次の提案を試しました。
# didn't fix it
bundle config build.nio4r --with-cflags="-std=c99"
bundle
# didn't fix it
xcode-select --install
sudo xcodebuild -license accept
bundle
また、この Go Rails ガイド、特に C 拡張機能を必要とする gem を扱う「最終ステップ」セクションも参照しましたが、macOS を Mojave から移行していないため、そのコマンドは適用されないようです。
現時点では、次に何を試すべきかわかりません。結局のところ、問題は C 拡張機能を必要とする gem をインストールできないことに関係しているようです。
環境:
解決策
問題は、Gemfile.lock ファイルで古いバージョンのバンドラーの使用がロックされていたことであることが判明しました。 Gemfile.lock を削除し、バンドルを再実行して Gemfile.lock を再生成しました。それで解決しました。 Gemfile.lock ファイルの最後に次のように記述されているため、このバージョンのバンドラーが気に入っています。
BUNDLED WITH
2.3.9