gem install mongrel 使用 ruby​​ 1.9.1 失败

Posted

技术标签:

【中文标题】gem install mongrel 使用 ruby​​ 1.9.1 失败【英文标题】:gem install mongrel fails with ruby 1.9.1 【发布时间】:2010-11-07 14:43:17 【问题描述】:

我昨天开始从事 Rails 开发。 我安装了 ruby​​ 1.9.1、rubygems 和 rails。 运行 gem install mongrel 运行良好,表面上也安装了 mongrel。我有点不解,因为:

脚本/服务器默认启动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

【问题讨论】:

【参考方案1】:

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

$ sudo gem1.9 安装 mongrel --pre > 构建原生扩展。这可能需要一段时间... > 成功安装mongrel-1.2.0.pre2 > 1 个宝石已安装

【讨论】:

【参考方案2】:

在 Ruby 1.9 上看起来像 other people are having problems running 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

将第 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”

6) mate / sudo vi handlers.rb

7) 修正

中的case语句

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

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

完成!

【讨论】:

网站宕机了,请把评论/内容贴在这里,谢谢【参考方案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

完成!

【讨论】:

【参考方案4】:

你可以像这样强制安装 mongrel

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

这解决了问题。

【讨论】:

以上是关于gem install mongrel 使用 ruby​​ 1.9.1 失败的主要内容,如果未能解决你的问题,请参考以下文章

Gem 不会通过 config.ru 加载

如何修复此错误? config.gem:在 vendor/gems 中解压的 gem authlogic-2.1.3 没有规范文件

gem install:无法构建 gem 原生扩展(找不到头文件)

即使安装了 gem,RVM Bundle Install Missing Gem 错误

Ubuntu 16.04在搭建Redis Cluster搭建时,使用gem install redis时出现:ERROR: While executing gem ... (Gem::FilePer

ruby gem install显示错误(Gem::RemoteFetcher::FetchError)