从1.8.7应用运行bundle
时出现以下错误。我刚升级到小牛队并且正在使用rbenv。
我已经尝试过的事情:
1)卸载并重新安装rbenv和ruby-build
2)删除目录并重新克隆
3)使用xcode-select --install
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.
答案 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编译。