whyisyoung's Blog

If you can not persist, you will never succeed :)

How to Solve Json Gem Install Failed in Windows

| Comments

环境: win7,ruby1.9.3 p392(我已经放弃在win下弄rails了,纯粹给自己没事添事。。。)

本文的方法1同样适用于解决由于 windows平台而导致用c编译器写的各种gem安装失败(如fast-stemmer, rdiscount, curb等)

错误:在一个rails project中运行__bundle install__(或是搭建octopress博客时运行__bundle install__时)其他的gem都能正确安装,唯独到__json__这里出了莫名其妙的错误=。=

如下:

Installing json (1.7.7)
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.
    C:/Ruby193/bin/ruby.exe extconf.rb
creating Makefile
make 
generating generator-i386-mingw32.def
compiling generator.c
In file included from c:/Ruby193/include/ruby-1.9.1/ruby.h:32:0,
         from ../fbuffer/fbuffer.h:5,
         from generator.c:1:
c:/Ruby193/include/ruby-1.9.1/ruby/ruby.h:109:14: error: size of array 'ruby_check_sizeof_voidp' is negative
...//此处省略n行=。=

查了各种资料,终于发现这是json采用了c的编译器的原因.

  • 方法1: > 请看so上对此问题的解决 > cannot-install-json-gem-using-windows. > > 根据这个说法,只要装个Devkit就行了,下载链接:download-devkit > > 用法请戳 how-to-use-devkit > > 好吧我错了,方法2只是治标不治本,遇到什么fast-stemmer的gem时(octopress要用到)还是错了,上面wiki给的用法终究还是解决了这个问题,只要一步一步耐心看下去。 > > 关键的几步:devkit下载请下4.5.2版本,不要用mingw > > 运行 ruby rake.rb install 报错时(什么skipping because of existing gems)只需运行 > > ruby rake.db install –force
    > 检验方法: > > gem install json –platform=ruby > > 安装成功而且应该看到 with native extensions 的消息(反正我这边貌似中文的原因又报了点错=。=) 接着运行 > > ruby -rubygems -e “require ‘json’; puts JSON.load(‘[42]’).inspect” > > 应该输出 [42] > > 这样就大功告成啦~

  • 方法2: > > 反正切回linux是p事没有。json装的好不过滴的。所以说不要在win下弄rails啊!!! > > 但是我昨晚找到了新法子,用纯ruby写的 json_pure 代替了json.

具体方法如下: > > 在工作目录下找到gemfile.lock, > > 用文本编辑器打开,找到 json 1.7.7改为 json_pure 1.7.7 > > 然后再运行bundle install , your bundle is complete搞定。(考虑到rubygems.org不稳定,推荐使用 rubygem 淘宝镜像 ) > > 此处牺牲了对速度的需求,毕竟c跑地要快些=。=不是好办法。 > > 另外雅安加油,为他们祈福~

Comments