gem install mongrel在ruby 1.9.1上失败

22

昨天我开始了Rails开发。
我安装了Ruby 1.9.1、RubyGems和Rails。
运行gem install mongrel没有问题,而且表面上也安装了Mongrel。我有点困惑,因为:

  • script/server默认启动Webrick
  • which mongrel返回空
  • locate mongrel返回很多类似的条目
/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/mongrel-1.0.1
/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib
/Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel
.
.
.
/usr/local/bin/mongrel_rails
/usr/local/lib/ruby/gems/1.9.1/cache/mongrel-1.1.5.gem
/usr/local/lib/ruby/gems/1.9.1/doc/actionpack-2.3.2/rdoc/files/lib/action_controller/vendor/rack-1_0/rack/handler/evented_mongrel_rb.html
/usr/local/lib/ruby/gems/1.9.1/doc/actionpack-2.3.2/rdoc/files/lib/action_controller/vendor/rack-1_0/rack/handler/mongrel_rb.html
/usr/local/lib/ruby/gems/1.9.1/doc/actionpack-2.3.2/rdoc/files/lib/action_controller/vendor/rack-1_0/rack/handler/swiftiplied_mongrel_rb.html
/usr/local/lib/ruby/gems/1.9.1/gems/actionpack-2.3.2/lib/action_controller/vendor/rack-1.0/rack/handler/evented_mongrel.rb
/usr/local/lib/ruby/gems/1.9.1/gems/actionpack-2.3.2/lib/action_controller/vendor/rack-1.0/rack/handler/mongrel.rb /usr/local/lib/ruby/gems/1.9.1/gems/actionpack-2.3.2/lib/action_controller/vendor/rack-1.0/rack/handler/swiftiplied_mongrel.rb /usr/local/lib/ruby/gems/1.9.1/gems/mongrel-1.1.5 。 。 。

看起来我已经安装了mongrel(默认安装和自定义安装都有)。那为什么“which mongrel”没有返回任何东西呢?

另外尝试使用gem install mongrel重新安装mongrel会产生一系列异常:

Building native extensions.  This could take a while...
ERROR:  Error installing mongrel:
    ERROR: Failed to build gem native extension.
/usr/local/bin/ruby extconf.rb install mongrel checking for main() in -lc... yes creating Makefile make gcc -I. -I/usr/local/include/ruby-1.9.1/i386-darwin9.7.0 -I/usr/local/include/ruby-1.9.1/ruby/backward -I/usr/local/include/ruby-1.9.1 -I. -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -fno-common -D_XOPEN_SOURCE=1 -O2 -g -Wall -Wno-parentheses -fno-common -pipe -fno-common -o http11.o -c http11.c http11.c: In function 'http_field': http11.c:77: error: 'struct RString' has no member named 'ptr' http11.c:77: error: 'struct RString' has no member named 'len' http11.c:77: warning: left-hand operand of comma expression has no effect http11.c:77: warning: statement with no effect http11.c: In function 'header_done': http11.c:172: error: 'struct RString' has no member named 'ptr' http11.c:174: error: 'struct RString' has no member named 'ptr'http11.c:176: error: 'struct RString' has no member named 'ptr' http11.c:177: error: 'struct RString' has no member named 'len' http11.c: 在函数 'HttpParser_execute' 中: http11.c:298: error: 'struct RString' has no member named 'ptr' http11.c:299: error: 'struct RString' has no member named 'len' make: *** [http11.o] 错误 1
在 http11.c 文件中,第 176 和 177 行代码出错,'struct RString' 结构体没有名为 'ptr' 和 'len' 的成员变量。在函数 'HttpParser_execute' 中的第 298 和 299 行也有相同的错误。由于这些错误,执行 make 命令出现了错误并停止了编译。
4个回答

47

您可以使用 sudo gem install mongrel --pre 安装 Mongrel 1.2 预发布版:

$ sudo gem1.9 install mongrel --pre
> 正在构建本地扩展,可能需要一段时间...
> mongrel-1.2.0.pre2 安装成功
> 已安装 1 个宝石

5

看起来有其他人在Ruby 1.9上运行Mongrel时遇到了问题

Ami Mahloof的评论似乎是一个可能的解决方法:

以下是您需要执行以修复此问题的步骤

以下是更新后的说明:

1)cd /usr/local/lib/ruby/gems/1.9.1/gems/mongrel-1.1.5/ext/http11

2)sudo vi / mate on http11.c 并:

将第77行替换为

for(ch = RSTRING_PTR(f), end = ch + RSTRING_LEN(f); ch < end; ch++) {

将第172行替换为

colon = strchr(RSTRING_PTR(temp), ':');

将第174行替换为

rb_hash_aset(req, global_server_name, rb_str_substr(temp, 0, colon - RSTRING_PTR(temp)));

将第176、177行替换为

rb_str_substr(temp, colon - RSTRING_PTR(temp)+1, RSTRING_LEN(temp)));

将第298、299行替换为

dptr = RSTRING_PTR(data);

dlen = RSTRING_LEN(data);

3)保存文件,关闭vi / textmate

4)sudo ruby extconf.rb && sudo make && sudo make install

5)cd ../../lib/mongrel (或完整路径“/usr/local/lib/ruby/gems/1.9.1/gems/mongrel-1.1.5/lib/mongrel”

6)mate / sudo vi handlers.rb

7)更正中的case语句

在208-212行,将“:false”的实例更改为“then false”

8)sudo gem install gem_plugin(否则mongrel可能会挂起)

完成!


2
网站挂了,请你把评论/内容复制到这里,谢谢。 - msanjay

3

这是一个编译问题,因此做起来更容易:

git clone git://github.com/mongrel/mongrel.git

cd mongrel/ext/http/

现在编辑http11.c文件:
#ifndef RSTRING_PTR
#define RSTRING_PTR(s) (RSTRING(s))
#endif
#ifndef RSTRING_LEN
#define RSTRING_LEN(s) (RSTRING(s))
#endif

保存它,然后在同一个目录下执行以下操作:

sudo ruby extconf.rb && sudo make && sudo make install

完成!


2

您可以强制安装 Mongrel,方法如下:

sudo gem install mongrel -v 1.2.0.pre2 -- --with-cflags=\"-O2 -pipe -march=native -w\"

这样就解决了问题。


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