【问题标题】:gem install mongrel fails with ruby 1.9.1gem install mongrel 使用 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

【问题讨论】:

    标签: ruby rubygems mongrel ruby-1.9


    【解决方案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\"

        这解决了问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-01-02
          • 1970-01-01
          • 2011-07-10
          • 2012-02-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多