Techioz Blog

またはネストされた XPath: あなたのようなネストされたテーブルの状況ではありません

概要

私はこのプロジェクトを約 1 年間開発してきましたが、約 1 か月前に、私のバージョンの Ruby (rbenv; 2.3.1 を使用) と互換性のない gem がインストールされているという問題に遭遇しました。ディレクトリを爆破し、すべての gem をアンインストールし、rbenv をアンインストールしてから、rbenv と Ruby をインストールしました。私の仲間の開発者はプロジェクトのセットアップに何の問題もありませんでしたが、バンドル インストールを実行すると、therubyracer 0.12.3 では次のエラーが表示されてインストールが常に失敗するようです。

Fetching therubyracer 0.12.3
Installing therubyracer 0.12.3 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

  current directory: /Users/deaster/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/therubyracer- 
0.12.3/ext/v8
/Users/deaster/.rbenv/versions/2.3.1/bin/ruby -r ./siteconf20191211-2125-b9wazv.rb extconf.rb
checking for main() in -lpthread... yes
checking for main() in -lobjc... yes
creating Makefile

To see why this extension failed to compile, please check the mkmf.log which can be found here:

  /Users/deaster/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/extensions/x86_64-darwin-18/2.3.0- 
static/therubyracer-0.12.3/mkmf.log

current directory: /Users/deaster/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/therubyracer-
0.12.3/ext/v8
make "DESTDIR=" clean
/Users/deaster/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/make-0.3.1/bin/make:4:in `<top 
(required)>': undefined local variable or method `make' for main:Object (NameError)
    from /Users/deaster/.rbenv/versions/2.3.1/bin/make:23:in `load'
    from /Users/deaster/.rbenv/versions/2.3.1/bin/make:23:in `<main>'

current directory: /Users/deaster/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/therubyracer-
0.12.3/ext/v8
make "DESTDIR="
/Users/deaster/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/make-0.3.1/bin/make:4:in `<top 
(required)>': undefined local variable or method `make' for main:Object (NameError)
    from /Users/deaster/.rbenv/versions/2.3.1/bin/make:23:in `load'
    from /Users/deaster/.rbenv/versions/2.3.1/bin/make:23:in `<main>'

make failed, exit code 1

Gem files will remain installed in 
/Users/deaster/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/therubyracer-0.12.3 for inspection.
Results logged to /Users/deaster/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/extensions/x86_64-darwin-
18/2.3.0-static/therubyracer-0.12.3/gem_make.out

An error occurred while installing therubyracer (0.12.3), and Bundler cannot continue.
Make sure that `gem install therubyracer -v '0.12.3'` succeeds before bundling.

In Gemfile:
  therubyracer

同じエラーが再現された場所はどこにも見つからないようです。インストールする前に、this make を実行すると、次の結果が得られます。

developer.rhapsody.com git:(master) which make
  /usr/bin/make
developer.rhapsody.com git:(master) make --version
  GNU Make 3.81
  Copyright (C) 2006  Free Software Foundation, Inc.
  This is free software; see the source for copying conditions.
  There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
  PARTICULAR PURPOSE.

  This program built for i386-apple-darwin11.3.0

ただし、 gem install therubyracer -v ‘0.12.3’ を実行しようとした後、this make を実行すると、次のメッセージが表示されます。

developer.rhapsody.com git:(master) which make
  /Users/deaster/.rbenv/shims/make
developer.rhapsody.com git:(master) make --version
  /Users/deaster/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/make-0.3.1/bin/make:4:in `<top 
  (required)>': undefined local variable or method `make' for main:Object (NameError)
      from /Users/deaster/.rbenv/versions/2.3.1/bin/make:23:in `load'
      from /Users/deaster/.rbenv/versions/2.3.1/bin/make:23:in `<main>'

これを機能させるために、このプロジェクトと rbenv を何度か爆破しましたが、このステップを通過できません。私のチームメンバーはこのエラーに遭遇したことがないので、セットアップを手伝ってもらうのに苦労しています。 make gem に問題があることは理解していますが、それを修正する方法がわかりません。

何かご意見は?

解決策

make gem は GNU make プログラムとは何の関係もありません。

それは本当にひどい名前の、疑わしい品質の宝石です。

ここで何が起こっているのかというと、 gem install make を実行した (または Gemfile に含まれていた) ため、RBenv によって生成された shim がシステム上の GNU make をシャドウイングしていることになります。私が理解できないのは、Gem の作成者がなぜこれほど無知で、これが大きな問題になることに気づかなかったのかということです。

$ gem uninstall make を実行すると問題が解決されるはずです。また、Gemfile 内にないことも確認してください。