Rails 在搭建 rails 环境时碰到的问题,Linux 和 Windows 都碰到了问题

Season · 2012年01月21日 · 最后由 sinchang 回复于 2013年08月06日 · 7834 次阅读

本人 rails 新手,然后因为种种原因,打算深入学习 rails,但是在自己的笔记本上搭建 rails 环境总是出现问题,弄了好久,也没有解决,无奈过来,希望有人帮忙。。。 我先是在 windows 上搭环境,用的是 railsinstaller,本以为装好就可以了,可是运行 bundle 时,总有一个什么 json1.6.4 什么什么的错误,重装后错误变成了找不到 make 命令,网上说要 devkit,可是我装了啊,也没用。后来无可奈何,我决定用 linux。 因为我不会 linux,所以我选择了一个安装简单的 linux,,就是雨林木风的那个 linux,叫 YLMF OS。。。 我想应该没问题把,然后我在它的软件中心,安装了 ruby1.9.2 和 ruby-dev1.9.2。之后呢,我安装的 rubygems,然后升级了 gems 到最新版,一切很顺利,可以在我运行 sudo gem install rails 时,问题出现了。

错误如下:(可能有点长)

sudo gem install rails Password: Fetching: activesupport-3.2.0.gem (100%) Fetching: activemodel-3.2.0.gem (100%) Fetching: journey-1.0.0.gem (100%) Fetching: sprockets-2.1.2.gem (100%) Fetching: actionpack-3.2.0.gem (100%) Fetching: activerecord-3.2.0.gem (100%) Fetching: activeresource-3.2.0.gem (100%) Fetching: actionmailer-3.2.0.gem (100%) Building native extensions. This could take a while... ERROR: Error installing rails: ERROR: Failed to build gem native extension.

/usr/bin/ruby extconf.rb creating Makefile

make gcc -I. -I/usr/include/ruby-1.9.1/i686-linux -I/usr/include/ruby-1.9.1/ruby/backward -I/usr/include/ruby-1.9.1 -I. -D_FILE_OFFSET_BITS=64 -fPIC -march=i686 -mtune=i686 -O3 -pipe -fPIC -Wall -o parser.o -c parser.c 在包含自 parser.rl:1 的文件中: ../fbuffer/fbuffer.h:5:20: 错误:assert.h:没有那个文件或目录 在包含自 /usr/include/ruby-1.9.1/ruby.h:32 的文件中, 从 ../fbuffer/fbuffer.h:6, 从 parser.rl:1: /usr/include/ruby-1.9.1/ruby/ruby.h:50:21: 错误:stdlib.h:没有那个文件或目录 /usr/include/ruby-1.9.1/ruby/ruby.h:54:21: 错误:string.h:没有那个文件或目录 /usr/include/ruby-1.9.1/ruby/ruby.h:64:21: 错误:stdint.h:没有那个文件或目录 /usr/include/ruby-1.9.1/ruby/ruby.h:67:23: 错误:inttypes.h:没有那个文件或目录 /usr/include/ruby-1.9.1/ruby/ruby.h:72:19: 错误:stdio.h:没有那个文件或目录 /usr/include/ruby-1.9.1/ruby/ruby.h:77:20: 错误:alloca.h:没有那个文件或目录 在包含自 /usr/lib/gcc/i686-pc-linux-gnu/4.4.3/include-fixed/syslimits.h:7 的文件中, 从 /usr/lib/gcc/i686-pc-linux-gnu/4.4.3/include-fixed/limits.h:11, 从 /usr/include/ruby-1.9.1/ruby/ruby.h:176, 从 /usr/include/ruby-1.9.1/ruby.h:32, 从 ../fbuffer/fbuffer.h:6, 从 parser.rl:1: /usr/lib/gcc/i686-pc-linux-gnu/4.4.3/include-fixed/limits.h:122:61: 错误:limits.h:没有那个文件或目录 在包含自 /usr/include/ruby-1.9.1/ruby/ruby.h:1326 的文件中, 从 /usr/include/ruby-1.9.1/ruby.h:32, 从 ../fbuffer/fbuffer.h:6, 从 parser.rl:1: /usr/include/ruby-1.9.1/ruby/missing.h:22:24: 错误:sys/time.h:没有那个文件或目录 /usr/include/ruby-1.9.1/ruby/missing.h:31:25: 错误:sys/types.h:没有那个文件或目录 In file included from /usr/include/ruby-1.9.1/ruby/intern.h:29, from /usr/include/ruby-1.9.1/ruby/ruby.h:1327, from /usr/include/ruby-1.9.1/ruby.h:32, from ../fbuffer/fbuffer.h:6, from parser.rl:1: /usr/include/ruby-1.9.1/ruby/st.h:122: 错误:expected declaration specifiers or‘...’before‘uint32_t’ In file included from /usr/include/ruby-1.9.1/ruby/ruby.h:1327, from /usr/include/ruby-1.9.1/ruby.h:32, from ../fbuffer/fbuffer.h:6, from parser.rl:1: /usr/include/ruby-1.9.1/ruby/intern.h:249: 错误:expected‘=’, ‘,’, ‘;’, ‘asm’or‘attribute’before‘rb_fdset_t’ /usr/include/ruby-1.9.1/ruby/intern.h:339: 错误:expected declaration specifiers or‘...’before‘fd_set’ /usr/include/ruby-1.9.1/ruby/intern.h:339: 错误:expected declaration specifiers or‘...’before‘fd_set’ /usr/include/ruby-1.9.1/ruby/intern.h:339: 错误:expected declaration specifiers or‘...’before‘fd_set’ /usr/include/ruby-1.9.1/ruby/intern.h:339: 警告:‘struct timeval’在形参表内部声明 /usr/include/ruby-1.9.1/ruby/intern.h:339: 警告:它的作用域仅限于此定义或声明,这可能并不是您想要的 /usr/include/ruby-1.9.1/ruby/intern.h:340: 错误:expected declaration specifiers or‘...’before‘rb_fdset_t’ /usr/include/ruby-1.9.1/ruby/intern.h:340: 错误:expected declaration specifiers or‘...’before‘rb_fdset_t’ /usr/include/ruby-1.9.1/ruby/intern.h:340: 错误:expected declaration specifiers or‘...’before‘rb_fdset_t’ /usr/include/ruby-1.9.1/ruby/intern.h:340: 警告:‘struct timeval’在形参表内部声明 /usr/include/ruby-1.9.1/ruby/intern.h:341: 警告:‘struct timeval’在形参表内部声明 /usr/include/ruby-1.9.1/ruby/intern.h:508: 错误:expected declaration specifiers or‘...’before‘pid_t’ /usr/include/ruby-1.9.1/ruby/intern.h:526: 错误:expected‘=’, ‘,’, ‘;’, ‘asm’or‘attribute’before‘rb_fork’ /usr/include/ruby-1.9.1/ruby/intern.h:527: 错误:expected‘=’, ‘,’, ‘;’, ‘asm’or‘attribute’before‘rb_fork_err’ /usr/include/ruby-1.9.1/ruby/intern.h:529: 错误:expected‘=’, ‘,’, ‘;’, ‘asm’or‘attribute’before‘rb_waitpid’ /usr/include/ruby-1.9.1/ruby/intern.h:530: 错误:expected‘)’before‘pid’ /usr/include/ruby-1.9.1/ruby/intern.h:531: 错误:expected‘=’, ‘,’, ‘;’, ‘asm’or‘attribute’before‘rb_spawn’ /usr/include/ruby-1.9.1/ruby/intern.h:532: 错误:expected‘=’, ‘,’, ‘;’, ‘asm’or‘attribute’before‘rb_spawn_err’ /usr/include/ruby-1.9.1/ruby/intern.h:534: 错误:expected‘)’before‘pid’ /usr/include/ruby-1.9.1/ruby/intern.h:650: 错误:expected declaration specifiers or‘...’before‘uint32_t’ /usr/include/ruby-1.9.1/ruby/intern.h:774: 错误:expected‘)’before‘long’ /usr/include/ruby-1.9.1/ruby/intern.h:775: 错误:expected‘)’before‘long’ In file included from parser.rl:1: ../fbuffer/fbuffer.h: 在函数‘fbuffer_alloc’中: ../fbuffer/fbuffer.h:48: 警告:隐式声明函数‘memset’ ../fbuffer/fbuffer.h:48: 警告:隐式声明与内建函数‘memset’不兼容 ../fbuffer/fbuffer.h: 在函数‘fbuffer_append’中: ../fbuffer/fbuffer.h:85: 警告:隐式声明函数‘memcpy’ ../fbuffer/fbuffer.h:85: 警告:隐式声明与内建函数‘memcpy’不兼容 ../fbuffer/fbuffer.h: 在函数‘fbuffer_dup’中: ../fbuffer/fbuffer.h:141: 警告:隐式声明函数‘assert’ parser.rl: 在函数‘JSON_parse_value’中: parser.rl:226: 警告:隐式声明函数‘strncmp’ parser.rl: 在函数‘JSON_allocate’中: parser.rl:820: 警告:隐式声明与内建函数‘memset’不兼容 parser.rl: 在函数‘Init_parser’中: parser.rl:884: 警告:隐式声明函数‘strlen’ parser.rl:884: 警告:隐式声明与内建函数‘strlen’不兼容 parser.rl:885: 警告:隐式声明与内建函数‘strlen’不兼容 parser.rl:886: 警告:隐式声明与内建函数‘strlen’不兼容 parser.rl:888: 警告:隐式声明与内建函数‘strlen’不兼容 parser.rl:889: 警告:隐式声明与内建函数‘strlen’不兼容 parser.rl:890: 警告:隐式声明与内建函数‘strlen’不兼容 parser.rl:891: 警告:隐式声明与内建函数‘strlen’不兼容 parser.rl:892: 警告:隐式声明与内建函数‘strlen’不兼容 parser.rl:893: 警告:隐式声明与内建函数‘strlen’不兼容 parser.rl:894: 警告:隐式声明与内建函数‘strlen’不兼容 parser.rl:895: 警告:隐式声明与内建函数‘strlen’不兼容 parser.rl:896: 警告:隐式声明与内建函数‘strlen’不兼容 parser.rl:897: 警告:隐式声明与内建函数‘strlen’不兼容 parser.rl:898: 警告:隐式声明与内建函数‘strlen’不兼容 parser.rl:899: 警告:隐式声明与内建函数‘strlen’不兼容 parser.rl:900: 警告:隐式声明与内建函数‘strlen’不兼容 parser.rl:901: 警告:隐式声明与内建函数‘strlen’不兼容 parser.rl:902: 警告:隐式声明与内建函数‘strlen’不兼容 parser.rl:903: 警告:隐式声明与内建函数‘strlen’不兼容 parser.rl:904: 警告:隐式声明与内建函数‘strlen’不兼容 parser.rl:905: 警告:隐式声明与内建函数‘strlen’不兼容 parser.rl:907: 警告:隐式声明与内建函数‘strlen’不兼容 parser.rl:907: 警告:隐式声明与内建函数‘strlen’不兼容 parser.rl:908: 警告:隐式声明与内建函数‘strlen’不兼容 parser.rl:908: 警告:隐式声明与内建函数‘strlen’不兼容 parser.rl:909: 警告:隐式声明与内建函数‘strlen’不兼容 parser.rl:909: 警告:隐式声明与内建函数‘strlen’不兼容 parser.rl:910: 警告:隐式声明与内建函数‘strlen’不兼容 parser.rl:910: 警告:隐式声明与内建函数‘strlen’不兼容 parser.rl:911: 警告:隐式声明与内建函数‘strlen’不兼容 parser.rl:911: 警告:隐式声明与内建函数‘strlen’不兼容 parser.rl:912: 警告:隐式声明与内建函数‘strlen’不兼容 parser.rl:912: 警告:隐式声明与内建函数‘strlen’不兼容 parser.rl:913: 警告:隐式声明与内建函数‘strlen’不兼容 parser.rl:914: 警告:隐式声明与内建函数‘strlen’不兼容 make: *** [parser.o] 错误 1

Gem files will remain installed in /usr/lib/ruby/gems/1.9.1/gems/json-1.6.5 for inspection. Results logged to /usr/lib/ruby/gems/1.9.1/gems/json-1.6.5/ext/json/ext/parser/gem_make.out

我现在觉得挺无助的,希望有人可以帮我解决这问题,,十分感谢!!!

  1. 建议不要在 windows 下开发
  2. linux 这些错误我以前没有遇到过,也不知道如何解决。在 linux 下搭建 ruby/rails 开发环境,建议使用 rvm。请参见本站 wiki: 《如何快速正确的安装 Ruby, Rails 运行环境》 http://ruby-china.org/wiki/install_ruby_guide

《如何快速正确的安装 Ruby, Rails 运行环境》看了这篇文章,也没有用,我觉得问题出在 linux,可是我对 linux 不了解,所以不知道要怎么搞啊,,,悲剧。

gem install rails 不要用 sudo,sudo MS 用的是类似 root 隐藏用户,他的路径不定有你在用户下装的 ruby 的路径

不用 sudo 的话,会报这个错误 Fetching: json-1.6.5.gem (100%) ERROR: While executing gem ... (Gem::FilePermissionError) You don't have write permissions into the /usr/lib/ruby/gems/1.9.1 director

请一步一步按照《如何快速正确的安装 Ruby, Rails 运行环境》 http://ruby-china.org/wiki/install_ruby_guide 中的步骤安装

支持楼上的,你最好把你之前安装的啥 ruby 什么的都卸了吧,你用错帐户安装了,你会遇到很多和权限有关的问题

谢谢各位了,主要是我对 linux 不懂,一时半会有些东西还搞不明白。而且我用的是一个国产的 linux,很多东西和网上的还不一样。像 rvm,输入那段命令没反应额,,, 不过,最后我还是在 windows 下把 rails 环境搞好了,可以开始做事了,以后有时间再去研究下 linux 的把,BTW,这论坛感觉挺不错的。

国产的 linux 也是不错的,我也是用深度 LInux 他只是在 Ubuntu 上加些东西而以 慢慢学吧

#4 楼 @Season 我在 linux 下也碰到一样打问题 你怎么解决?

需要 登录 后方可回复, 如果你还没有账号请 注册新账号