gem install rails 失败于绑定调用者 gem。

14

我正试图让Rails工作,但在运行sudo gem install rails后,无法通过binding_of_caller gem。我认为这个gem不是Rails所必需的,但无法弄清楚如何跳过它或停止它尝试安装。

每次gem列表到达binding_of_callers时,都会出现以下情况:

Installing binding_of_callers (0.6.9) with native extensions

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

/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby extconf.rb 
creating Makefile

make
xcrun cc -I. -I/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/universal-darwin12.0 -I/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/universal-darwin12.0 -I. -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE   -fno-common -arch i386 -arch x86_64 -g -Os -pipe -fno-common -DENABLE_DTRACE  -fno-common  -pipe -fno-common  -O0 -std=c99  -c binding_of_caller.c
binding_of_caller.c:4:10: fatal error: 'vm_core.h' file not found
#include "vm_core.h"
         ^
1 error generated.
make: *** [binding_of_caller.o] Error 1


Gem files will remain installed in /Users/ericavirtue/.bundler/tmp/54559/gems/binding_of_caller-0.6.9 for inspection.
Results logged to /Users/ericavirtue/.bundler/tmp/54559/gems/binding_of_caller-0.6.9/ext/binding_of_caller/gem_make.out
An error occurred while installing binding_of_caller (0.6.9), and Bundler cannot continue.
Make sure that `gem install binding_of_caller -v '0.6.9'` succeeds before bundling.

我正在使用 OSX 10.8.2 操作系统,使用 Pow 作为 Web 服务器,用 rbenv 管理 Ruby 版本。此外,我还在运行 Ruby 1.9.3-p385

5个回答

19

尝试更新 Gem:

$ bundle update binding_of_caller


2
请注意,如果您在升级到Ruby 2.0时遇到此错误,则以下是答案。这是因为您可能需要将binding_of_caller更新到0.7.1。可以在此处找到:http://www.gavinmorrice.com/blog/posts/37-ruby-2-0-0-an-error-occurred-while-installing-binding_of_caller - Taytay
你可能需要整体运行 bundle update.. 但是没错,这就是方法。谢谢! - Tigraine

3
在安装Rails之前,请使用以下命令添加gem(还请注意,gem名称是单数形式):
$ gem install binding_of_caller

然后运行:

$ bundle update rails

或者:

$ gem install rails

(或者rbenv提供的任何东西)

很不幸,我甚至无法完成这一步。每当我尝试安装 gem 时都会出错。我将获取离线帮助,并在找到解决方案后发布它。 - Arel
你是否收到与原帖相同的错误信息? - Rich

1
有没有使用rbenv解决这个问题的进展?
我正在本地使用rbenv加载jruby 2.0,我希望继续使用这个解决方案,而不是rvm。
Ascended:Ascended foundation3 $ rbenv local
jruby-1.7.4
Ascended:Ascended foundation3 $ jruby --version
jruby 1.7.4 (2.0.0) 2013-05-16 2390d3b on Java HotSpot(TM) 64-Bit Server VM 1.6.0_51-b11-457-11M4509 [darwin-x86_64]
Ascended:Ascended foundation3 $ gcc --version
i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)
Copyright (C) 2007 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.

我的 ~/.jrubyconf 已设置为:
compat.version=2.0                                                                                                         
cext.enabled=true                                                               
errno.backtrace=true

当我尝试安装调用者绑定时,我遇到了以下问题 -
Ascended:Ascended foundation3 $ gem install binding_of_caller -v '0.7.2'
Building native extensions.  This could take a while...
ERROR:  Error installing binding_of_caller:
        ERROR: Failed to build gem native extension.

        /Users/Ascended/.rbenv/versions/jruby-1.7.4/bin/jruby extconf.rb
/Users/Ascended/.rbenv/versions/jruby-1.7.4/lib/ruby/shared/mkmf.rb:1:in `(root)': Use RbConfig instead of obsolete and depreca
ted Config.
/Users/Ascended/.rbenv/versions/jruby-1.7.4/lib/ruby/shared/mkmf.rb:1791:in `init_mkmf': Use RbConfig instead of obsolete and deprecated Config.
/Users/Ascended/.rbenv/versions/jruby-1.7.4/lib/ruby/shared/mkmf.rb:1791:in `init_mkmf': Use RbConfig instead of obsolete and $eprecated Config.
creating Makefile

make
cc -I. -I/Users/Ascended/.rbenv/versions/jruby-1.7.4/lib/native/include -I/Users/Ascended/.rbenv/versions/jruby-1.7.4/lib/nati$e/include/ruby -I. -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE      -fPIC -DTARGET_RT_MAC_CFM=0  -fno-omit-frame-pointer -fno-strict-al$asing  -fexceptions   -O0 -std=c99  -arch x86_64 -c binding_of_caller.c
binding_of_caller.c:4:10: fatal error: 'vm_core.h' file not found
#include "vm_core.h"
         ^
1 error generated.
make: *** [binding_of_caller.o] Error 1


Gem files will remain installed in /Users/Ascended/.rbenv/versions/jruby-1.7.4/lib/ruby/gems/shared/gems/binding_of_caller-0.7$2 for inspection.
Results logged to /Users/Ascended/.rbenv/versions/jruby-1.7.4/lib/ruby/gems/shared/gems/binding_of_caller-0.7.2/ext/binding_of$caller/gem_make.out

根据此线程中标记为正确的答案,这是rbenv的问题,但jruby 1.7.4是正确的版本,并且已被引用,正在运行2.0。这不应该有效吗?我理解错了什么吗?


我遇到的 rbenv 问题是它没有为我的环境加载正确的 ruby 版本。我尝试改变我的 ruby 版本,但却没有生效。后来发现那个 ruby 问题导致 binding_of_caller 无法构建,这也是我切换回 rvm 的原因。如果 ruby -v 返回了预期的 ruby 版本,我不确定你需要做什么。 - Arel
好的,昨晚我无法让它正常工作,所以我暂时停止使用 pry-debugger,但是无法安装这样的 gem 严重降低了 Ruby 的内省能力,我需要尽快找到解决方法。 - Theta
请发帖回复,我会给你打勾,因为我更愿意继续使用rbenv。 - Arel

1

好的,问题在于RBENV无法识别为项目所使用的ruby版本。经过一段时间的尝试使rbenv工作后,我切换回RVM进行了一些调试,并安装了一些依赖项,成功安装了ruby 2.0.0p0,并将其识别为项目ruby。然后我就能够bundle了。所以回答我的问题...这是一个ruby版本问题。


-3

看起来你正在使用Linux。首先安装Ruby和RVM,然后尝试按照Rails的安装步骤进行操作。这可能是由于过时的Ruby版本引起的。虽然还不确定。


我正在运行OSX 10.8.2,并使用pow网络服务器和rbenv来管理ruby。我还在运行ruby 1.8.7 p-358。我完全迷失了。我已经花了整个下午/晚上来尝试让这个工作。我会更新问题,提供以上信息并尝试更新我的ruby版本。 - Arel
我现在正在使用ruby 1.9.3-p385。同样的问题。据我所知,问题在于binding_of_caller,因此我认为解决方案涉及跳过或删除该gem,或以某种方式解决上述问题。 - Arel
提示找不到vm_core.h文件。请尝试使用以下命令安装ruby-debug19 gem:gem install ruby-debug19 -- --with-ruby-include=$rvm_path/src/ruby-1.9.3-p385 - TakaGoto
vm_core.h 是 Ruby 核心的一部分。看起来你没有在自己的机器上构建环境,而是从某个地方得到了一个二进制文件。如果你在自己的机器上构建环境,你将拥有 vm_core.h 头文件。我使用 http://railsinstaller.org/ 在我的机器上安装 Ruby 和 Rails 堆栈,这非常好用,我正在使用 10.8 版本。 - Rudi
是的,这是一个 Ruby 的问题。确保项目需要的 Ruby 版本实际被项目使用。我的解决方案是将 Ruby 2.0.0p0 设为默认全局 Ruby。所以输入 ruby -v 可以显示 2.0.0p0。我之前遇到的问题是 rbenv 说我的 Ruby 版本是正确的版本,但我的系统 Ruby 仍然显示为 1.8.7,这就是上述问题的原因。 - Arel
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接