捆绑抛出错误Gem :: Install :: Extension BuildError:ERROR:with Mavericks and ruby​​ 2.0

时间:2014-02-28 16:50:43

标签: ruby-on-rails ruby macos gcc osx-mavericks

从1.8.7应用运行bundle时出现以下错误。我刚升级到小牛队并且正在使用rbenv。

我已经尝试过的事情:

1)卸载并重新安装rbenv和ruby-build

2)删除目录并重新克隆

3)使用xcode-select --install

安装x-code cli

4)brew install apple-gcc42

5)删除根ruby文件(2.0)并替换为1.8

6)brew unlink apple-gcc42

以上都没有奏效。

Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby extconf.rb
checking for re.h... no
creating Makefile

make "DESTDIR="
compiling parser.c
parser.rl:165:20: error: expected '(' after 'if'
            if RTEST(rb_funcall(klass, i_json_creatable_p, 0)) {
               ^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/include/ruby-2.0.0/ruby/ruby.h:445:18: note: expanded from macro 'RTEST'
#define RTEST(v) !(((VALUE)(v) & ~Qnil) == 0)
             ^
1 error generated.
make: *** [parser.o] Error 1


Gem files will remain installed in /Users/ryan/C2/c2/vendor/bundle/gems/json-1.4.6 for   inspection.
Results logged to /Users/ryan/C2/c2/vendor/bundle/gems/json-1.4.6/ext/json/ext/parser/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.

1 个答案:

答案 0 :(得分:2)

当我将旧的Ruby 1.9.3项目更改为Ruby 2.2.0并尝试bundle时,我得到了类似的东西。

我收到了parser.rl:139:20: error: expected '(' after 'if'" and "accept.c:128:2: error: use of undeclared identifier 'TRAP_BEG'等错误。

修复是升级未能构建的宝石bundle update json kgio在我的情况下,json gem和kgio gem未能建立。

如果您已锁定Gemfile中有问题的宝石的版本,您也可能想解锁它们。例如。将gem "json", "1.1.6"更改为gem "json"。虽然你当然应该确保知道为什么它首先被锁定了。

当您执行bundle时,它会尝试安装/构建Gemfile.lock中列出的gem版本。这些将是您之前在Ruby 1.8.7上安装的版本,或者在我的情况下为1.9.3。我猜那些宝石版本已经足够老了,以至于他们根本就没有为新的Ruby编译。