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 会引发它自己的一组异常:

构建原生扩展。这可能需要一段时间...
错误:安装 mongrel 时出错:
    错误:无法构建 gem 原生扩展。

/usr/local/bin/ruby extconf.rb 安装 mongrel
检查 -lc 中的 main()... 是
创建 Makefile

制作
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-括号 -fno-common -pipe -fno-common -o http11.o -c http11.c
http11.c:在函数“http_field”中:
http11.c:77:错误:“struct RString”没有名为“ptr”的成员
http11.c:77:错误:“struct RString”没有名为“len”的成员
http11.c:77:警告:逗号表达式的左侧操作数无效
http11.c:77:警告:声明无效
http11.c:在函数“header_done”中:
http11.c:172:错误:“struct RString”没有名为“ptr”的成员
http11.c:174:错误:“struct RString”没有名为“ptr”的成员
http11.c:176:错误:“struct RString”没有名为“ptr”的成员
http11.c:177:错误:“struct RString”没有名为“len”的成员
http11.c:在函数“HttpParser_execute”中:
http11.c:298:错误:“struct RString”没有名为“ptr”的成员
http11.c:299:错误:“struct RString”没有名为“len”的成员
make: *** [http11.o] 错误 1
4

4 回答 4

47

您可以使用以下命令安装 mongrel 1.2 预发行版sudo gem install mongrel --pre

$ sudo gem1.9 安装 mongrel --pre
> 构建原生扩展。这可能需要一段时间...
> 成功安装mongrel-1.2.0.pre2
> 1 个宝石已安装
于 2010-05-23T15:37:22.707 回答
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) http11.c 上的 sudo vi / mate 和:

将第 77 行替换为

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

将第 172 行替换为

冒号 = strchr(RSTRING_PTR(temp), ':');

将第 174 行替换为

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

替换第 176,177 行

rb_str_substr(temp, 冒号 - RSTRING_PTR(temp)+1, RSTRING_LEN(temp)));

替换第 298 299 行

dptr = RSTRING_PTR(数据);

dlen = RSTRING_LEN(数据);

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”</p>

6) mate / sudo vi handlers.rb

7) 修复 case 语句

在第 208-212 行,将“: false”的实例更改为“then false”</p>

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

完毕!

于 2009-07-02T13:02:25.843 回答
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

完毕!

于 2009-07-28T17:39:22.050 回答
2

你可以像这样强制安装 mongrel

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

这解决了这个问题。

于 2016-10-14T10:22:45.660 回答