bundle install 尝试构建 json 1.4.6 失败——我没有引用它

bundle install fails trying to build json 1.4.6 - which I'm not referencing

我正在尝试 运行 在 ruby 项目上进行捆绑安装,但失败并出现以下错误:

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    /Users/chrismc/.rvm/rubies/ruby-2.1.0/bin/ruby -r ./siteconf20150317-85350-hx8dcj.rb extconf.rb
checking for re.h... no
creating Makefile

make "DESTDIR=" clean

make "DESTDIR="
compiling parser.c
parser.rl:165:20: error: expected '(' after 'if'
                if RTEST(rb_funcall(klass, i_json_creatable_p, 0)) {
                   ^
/Users/chrismc/.rvm/rubies/ruby-2.1.0/include/ruby-2.1.0/ruby/ruby.h:437:18: note: expanded from macro 'RTEST'
#define RTEST(v) !(((VALUE)(v) & ~Qnil) == 0)
                 ^
1 error generated.
make: *** [parser.o] Error 1

make failed, exit code 2

Gem files will remain installed in /Users/chrismc/.rvm/gems/ruby-2.1.0/gems/json-1.4.6 for inspection.
Results logged to /Users/chrismc/.rvm/gems/ruby-2.1.0/extensions/x86_64-darwin-14/2.1.0/json-1.4.6/gem_make.out
An error occurred while installing json (1.4.6), and Bundler cannot continue.
Make sure that `gem install json -v '1.4.6'` succeeds before bundling.

我正在使用 rvm,我已经在 Ruby 的几个不同版本上尝试过,结果相似。

我没有在项目的任何地方引用 json 1.4.6。

我不清楚为什么 bundler 甚至试图安装这个 gem,更不用说如何解决这个问题了。我同样无法使用 "gem install."

安装 gem

我的 OS 是 Mac OSX.

gemenv的输出如下:

RubyGems Environment:
  - RUBYGEMS VERSION: 2.4.6
  - RUBY VERSION: 2.1.0 (2013-12-25 patchlevel 0) [x86_64-darwin14.0]
  - INSTALLATION DIRECTORY: /Users/chrismc/.rvm/gems/ruby-2.1.0
  - RUBY EXECUTABLE: /Users/chrismc/.rvm/rubies/ruby-2.1.0/bin/ruby
  - EXECUTABLE DIRECTORY: /Users/chrismc/.rvm/gems/ruby-2.1.0/bin
  - SPEC CACHE DIRECTORY: /Users/chrismc/.gem/specs
  - SYSTEM CONFIGURATION DIRECTORY: /Users/chrismc/.rvm/rubies/ruby-2.1.0/etc
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-darwin-14
  - GEM PATHS:
     - /Users/chrismc/.rvm/gems/ruby-2.1.0
     - /Users/chrismc/.rvm/gems/ruby-2.1.0@global
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - https://rubygems.org/
  - SHELL PATH:
     - /Users/chrismc/.rvm/gems/ruby-2.1.0/bin
     - /Users/chrismc/.rvm/gems/ruby-2.1.0@global/bin
     - /Users/chrismc/.rvm/rubies/ruby-2.1.0/bin
     - /Users/chrismc/.rvm/bin
     - /usr/local/bin
     - /usr/local/bin
     - /usr/bin
     - /bin
     - /usr/sbin
     - /sbin

我不知道如何继续。

您的编译器设置似乎有问题,而且您使用的是过时的 Ruby 版本。

解析器文件不应该有那个错误,不太可能(恕我直言)是因为你的 Ruby 版本,或者 JSON。您更有可能尝试使用不正确的编译器进行编译。

你能安装纯 JSON gem 吗?

gem install json-pure

你能安装当前的 JSON 本机 gem 吗?

gem install json -v "1.8.2"

如果您能够同时安装:

  • 然后下一个要看的地方是什么迫使旧 json gem。

  • 阅读你的 Gemfile.lock,并寻找较旧的 json gem。

  • 此外,最好将 Gemfile 中的所有内容更新为最新的,例如将固定到某个版本的任何内容更改为 gem 'foo', '~>x.y.z'gem 'foo', '>= x.y.z' 然后 运行 bundle update 以发现会发生什么。如果 gem 版本与您自己的代码库不兼容,您可能需要稍后恢复 Gemfile。

如果您可以安装纯 gem,但不能安装当前的本机 gem:

  • 然后下一个要检查的地方是你的编译器。

你能安装当前的 Ruby 吗?

rvm install ruby --latest

如果是,是否解决了 JSON 问题?

你的 GCC 在哪里?

command -v gcc

这是什么版本?

gcc --version
Configured with:
--prefix=/Applications/Xcode.app/Contents/Developer/usr
--with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 6.0 (clang-600.0.57) (based on LLVM 3.5svn)
Target: x86_64-apple-darwin14.1.0
Thread model: posix

您的错误消息表明结果已记录到此文件:

/Users/chrismc/.rvm/gems/ruby-2.1.0/extensions/x86_64-darwin-14/2.1.0/json-1.4.6/gem_make.out` 

你能 post 整个文件吗?

(如果您担心该文件包含半私人信息,请随时将其 post 私密或通过电子邮件发送;我在 GitHub 上 "joelparkerhenderson",Google, 等等)

这个问题的答案是 chefspec gem 间接要求 json 1.4.6。碰巧我在这段代码中不需要 chefspec,所以我可以简单地删除引用并继续我的业务。

如果我需要,我不知道如何实际使用 chefspec。