sudo gem install json遭遇如下的错误信息何解呢?

tinyfool 发布于 2014年06月11日 | 更新于 2014年06月12日
无人欣赏。

Mac OS X 10.10,安装有Xcode5 和 Xcode 6 beta,command line tools选的是Xcode 5的,我是Ruby初学者

Building native extensions.  This could take a while...
ERROR:  Error installing json:
    ERROR: Failed to build gem native extension.

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

make "DESTDIR="
compiling generator.c
In file included from generator.c:1:
In file included from ./../fbuffer/fbuffer.h:5:
In file included from /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.h:33:
/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:24:10: fatal error: 'ruby/config.h' file not found
#include "ruby/config.h"
         ^
1 error generated.
make: *** [generator.o] Error 1


Gem files will remain installed in /Library/Ruby/Gems/2.0.0/gems/json-1.8.1 for inspection.
Results logged to /Library/Ruby/Gems/2.0.0/gems/json-1.8.1/ext/json/ext/generator/gem_make.out
共28条回复
liprais 回复于 2014年06月11日

xcode 6 command line tools 装了没?

tinyfool 回复于 2014年06月11日

1楼 @liprais 还有Xcode 5,目前Command line tools选的是Xcode 5的

liprais 回复于 2014年06月11日

2楼 @tinyfool 啊,主题有写,我没看见. 然后我的10.9上也没有这个文件,所以就不知道怎么回事了 在osx上用ruby 建议用rvm,链接在这里: http://rvm.io

tinyfool 回复于 2014年06月11日

3楼 @liprais 没有,你问了以后我才更新到主题上的。

话说RVM专门是为了解决这类版本混乱问题出现的么?

xuan_lengyue 回复于 2014年06月11日

建议用 RVM 或者 rbenv,这两者安装 gem 都是无需 sudo 的,ruby 版本和 gemset 也比较好控制。

tinyfool 回复于 2014年06月11日

5楼 @xuan_lengyue RVM安装了,但是还是有点问题,我感觉是我机器上面有不同的ruby,然后混乱了

tinyfool 回复于 2014年06月11日

使用RVM安装发现了新的问题

Error running 'requirements_osx_brew_update_system ruby-2.1.2',
showing last 15 lines of /Users/tinyfool/.rvm/log/1402459044_ruby-2.1.2/update_system.log
    https://github.com/Homebrew/homebrew/wiki/Common-Issues
and make sure `brew update` works before continuing.'
++ rvm_pretty_print stderr
++ case "${rvm_pretty_print_flag:=auto}" in
++ case "${TERM:-dumb}" in
++ case "$1" in
++ [[ -t 2 ]]
++ return 1
++ printf %b 'Failed to update Homebrew, follow instructions here:
    https://github.com/Homebrew/homebrew/wiki/Common-Issues
and make sure `brew update` works before continuing.n'
Failed to update Homebrew, follow instructions here:
    https://github.com/Homebrew/homebrew/wiki/Common-Issues
and make sure `brew update` works before continuing.
++ return 1
Requirements installation failed with status: 1.
tinyfool 回复于 2014年06月11日

但是brew update也报错,唉,简直就是俄罗斯套娃错误啊

brew update
/usr/local/bin/brew: /usr/local/Library/brew.rb: /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby: bad interpreter: No such file or directory
/usr/local/bin/brew: line 21: /usr/local/Library/brew.rb: Undefined error: 0
liprais 回复于 2014年06月11日

搜到了这个 https://gist.github.com/chrisb/4d6a09c6cc1ca2e1b14e 目测是因为homebrew 还在用ruby 1.8而10.10上没有1.8导致的问题...总之还是要装xcode 6 command line tools

wwwjfy 回复于 2014年06月11日

8楼 @tinyfool Yosemite的ruby是2.0,把1.8改成Current或者2.0就能用,或者ln一个1.8... 还有别的文件有可能要改

jiangzhoubai 回复于 2014年06月11日

8楼 @tinyfool 系统盘已经做好。。 系统文件也已备份。 打算直接重装回10.9.3。我xcode5卡死。6崩溃,命令行各种程序混乱。。。我了个去。

tinyfool 回复于 2014年06月11日

9楼 @liprais 安装Xcode 6 command line tools为什么能解决问题啊?我还有一些项目要在Xcode 5下搞,可能会干扰的,我能不能直接自己安装一套东西,不去碰Xcode 6 command line tools啊?

tinyfool 回复于 2014年06月11日

10楼 @wwwjfy 怎么换?

jiangzhoubai 回复于 2014年06月11日

9楼 @liprais xcode 6 command line tools 这玩意根本没找到。 xcode-select install 也告诉我没有需要安装的。 我的开发clang都找不到

wwwjfy 回复于 2014年06月11日

13楼 @tinyfool 把/usr/local/Library/brew.rb里第一行的1.8改成Current/2.0...用了这几天没什么问题,就是homebrew 还会自己改回去

liprais 回复于 2014年06月11日

14楼 @jiangzhoubai https://gist.github.com/chrisb/4d6a09c6cc1ca2e1b14e 这里面有个链接试试?

lgn21st 回复于 2014年06月11日

8楼 @tinyfool 因为 Yosemite 刚刚出来,配套的包管理工具如 brew 或者 gem 都兼容问题,不过这些问题在近几天都会陆续解决。

我还未升级到 Yosemite,这里有个方案,仅供参考 https://gist.github.com/chrisb/4d6a09c6cc1ca2e1b14e

jiangzhoubai 回复于 2014年06月11日

16楼 @liprais 已决心撤到9.3

liprais 回复于 2014年06月11日

12楼 @tinyfool 我猜只要执行这两条就行了 sudo mkdir -p /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin sudo ln -s /usr/bin/ruby /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby

tinyfool 回复于 2014年06月11日

17楼 @lgn21st 所以,这不是Mac上玩ruby的常态?

tinyfool 回复于 2014年06月11日

17楼 @lgn21st 按照你的方法,我安装好rails

sudo gem install rails

然后

rails new democodes

没出现问题

然后

cd democodes
rails server

然后报错

Warning: You're using Rubygems 2.0.14 with Spring. Upgrade to at least Rubygems 2.1.0 and run `gem pristine --all` for better startup performance.
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/yaml.rb:4:in `<top (required)>':
It seems your ruby installation is missing psych (for YAML output).
To eliminate this warning, please install libyaml and reinstall your ruby.
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/yaml.rb:4:in `<top (required)>':
It seems your ruby installation is missing psych (for YAML output).

To eliminate this warning, please install libyaml and reinstall your ruby.
bin/rails:6: warning: already initialized constant APP_PATH
/Users/tinyfool/work/democodes/bin/rails:6: warning: previous definition of APP_PATH was here

这是说Xcode 6的Ruby也不行么?

lgn21st 回复于 2014年06月11日

21楼 @tinyfool 我尽量简单解释一下。

OSX Builtin 各种脚本语言环境,包括 Ruby,Python,PHP,还有 JavaScript,但是这些自带的脚本有两个问题:

  1. 这些语言都是默认安装到 root 用户环境的,普通用户可以直接用系统ruby执行一些管理脚本,但是如果要扩展安装第三方库或者插件,则需要 sudo 权限,这么做并不环保,也带来很安装上的问题,比如有些库或者插件需要通过 Clang 编译,编译的过程本身也需要 sudo 权限,以及编译过程需要的依赖库,也都需要通过 sudo 提前安装配置好。
  2. 这些默认语言的版本都比较低,而且升级不方便,自带的库只适用于运行一些服务器端管理脚本,以及一些简单的文件和进程,网络操作,对于做应用则远远不够,因为原因1的关系,不适宜扩展。

那么谁会使用系统自带的 Ruby 呢?

  • 通常一些第三方的工具会用,比如 homebrew
  • 系统管理员自己写的一些管理脚本可能会用到

为了解决开发的问题,通常最佳实践是不使用系统默认的ruby,而是用普通用户自己在本地编译一套,为了本地编译ruby,ruby社区专门为各个平台制作了一些ruby版本管理套件,比较流行的是 rvm 或者 rbenv,rvm 和 rbenv 各有优劣,就像 vim 和 emacs 一样,选择那种,看你个人的偏好以及习惯。

ruby版本管理器的做法通常是在本地 ~/.rvm 或者 ~/.rbenv 里面编译一套ruby,并且修改系统 env,把自己的搜索路径添加到 PATH 环境变量的前面,并通过一些 shell 的技术可以让你拥有多个版本的 ruby 且灵活切换,总的来说,推荐通过 rvm 或者 rbenv 在用户本地安装一套 ruby,然后就跟 sudo 彻底说再见了。

我刚刚查看了一下,OSX 10.10 的安装教程已经很容易找到了,比较推荐 goRails 的这篇,比较权威,且更新比较及时。

https://gorails.com/setup/osx/10.10-yosemite

lgn21st 回复于 2014年06月11日

21楼 @tinyfool 老大,忍忍风平浪静,忍忍海阔天空,如果专注开发的话,折腾还不稳定的 10.10 真的很浪费时间,还是退回到 10.9.3 吧,保证各种没有问题,且小半年后,10.10 正式发布或者比较后期的预览版,这些兼容问题就都解决了。

tinyfool 回复于 2014年06月11日

23楼 @lgn21st 哈哈,我隐约觉得去年你也这么劝过我

xuan_lengyue 回复于 2014年06月11日

Yosemite 自带的 ruby 是 2.0 的, homebrew 基于1.8,目前的解决方案是 ln 一个 2.0 到 1.8 的路径,不保证完全能用。

wwwjfy 回复于 2014年06月12日

刚发现homebrew在6.3已经更新到使用Current的Ruby了,只是brew update没法用,于是git pull之后git reset --hard origin/master就好了..

tinyfool 回复于 2014年06月12日

22楼 @lgn21st 万分感谢,搞定了

alt text

lgn21st 回复于 2014年06月12日

本帖有28个回复,因为您没有注册或者登录本站,所以,只能看到本帖的10条回复。如果想看到全部回复,请注册或者登录本站。

登录 或者 注册
相关帖子

[顶 楼]
|
|
[底 楼]
|
|
[首 页]