gem instalar mongrel falla con ruby ​​1.9.1

Me inicié en el desarrollo de Rails ayer.
Instalé ruby ​​1.9.1, rubygems y Rails.
Running gem install mongrel funcionó bien y aparentemente instaló mongrel también. Estoy un poco desconcertado porque:

  • script / server inicia webrick por defecto
  • which mongrel no devuelve nada
  • locate mongrel devuelve un montón de entradas como
 /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
 .
 .
 .

Parece que tengo mongrel instalado (tanto la instalación predeterminada como mi instalación personalizada). Entonces, ¿por qué no, qué mestizo devuelve algo?

También intentando reinstalar mongrel usando gem install mongrel devuelve lanza su propio conjunto de excepciones:

 Construcción de extensiones nativas.  Esto podría tomar un tiempo...
 ERROR: Error al instalar el mestizo:
     ERROR: Error al construir la extensión nativa de gem.

 / usr / local / bin / ruby ​​extconf.rb instala mongrel
 buscando main () en -lc ... yes
 creando makefile

 hacer
 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 -Wén-paréntesis -fno-common -pipe -fno-common -o http11.o -c http11.c
 http11.c: en la función 'http_field':
 http11.c: 77: error: 'struct RString' no tiene un miembro llamado 'ptr'
 http11.c: 77: error: 'struct RString' no tiene un miembro llamado 'len'
 http11.c: 77: advertencia: el operando de la mano izquierda de la expresión de coma no tiene efecto
 http11.c: 77: advertencia: statement sin efecto
 http11.c: en la función 'header_done':
 http11.c: 172: error: 'struct RString' no tiene un miembro llamado 'ptr'
 http11.c: 174: error: 'struct RString' no tiene un miembro llamado 'ptr'
 http11.c: 176: error: 'struct RString' no tiene un miembro llamado 'ptr'
 http11.c: 177: error: 'struct RString' no tiene un miembro llamado 'len'
 http11.c: en la función 'HttpParser_execute':
 http11.c: 298: error: 'struct RString' no tiene un miembro llamado 'ptr'
 http11.c: 299: error: 'struct RString' no tiene un miembro llamado 'len'
 hacer: *** [http11.o] Error 1

Parece que otras personas tienen problemas para ejecutar Mongrel en Ruby 1.9.

El comentario de Ami Mahloof parece que podría ser una posible solución:

Esto es lo que necesitas hacer para arreglarlo

Aquí están las instrucciones actualizadas:

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

2) sudo vi / mate en http11.c y:

reemplazar la línea 77 con

para (ch = RSTRING_PTR (f), end = ch + RSTRING_LEN (f); ch

reemplazar la línea 172 con

dos puntos = strchr (RSTRING_PTR (temp), ‘:’);

Reemplace la línea 174 con

rb_hash_aset (req, global_server_name, rb_str_substr (temp, 0, dos puntos – RSTRING_PTR (temp)));

línea de respuesta 176,177

rb_str_substr (temp, dos puntos – RSTRING_PTR (temp) +1, RSTRING_LEN (temp)));

reemplazar lineas 298 299

dptr = RSTRING_PTR (datos);

dlen = RSTRING_LEN (datos);

3) guardar el archivo, cerrar el vi / textmate

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

5) cd ../../lib/mongrel (o la ruta completa “/usr/local/lib/ruby/gems/1.9.1/gems/mongrel-1.1.5/lib/mongrel”

6) mate / sudo vi handlers.rb

7) arreglar las declaraciones del caso en

En las líneas 208-212, cambie las instancias de “: false” a “then false”

8) sudo gem install gem_plugin (de lo contrario, el mestizo puede colgar)

¡hecho!

Puede instalar la versión preliminar de mongrel 1.2 con sudo gem install mongrel --pre :

 $ sudo gem1.9 install mongrel --pre
 > Construcción de extensiones nativas.  Esto podría tomar un tiempo...
 > Instalado con éxito mongrel-1.2.0.pre2
 > 1 gem instalada

Es un problema de comstackción por lo que es más fácil hacer esto:

 git clone git://github.com/mongrel/mongrel.git cd mongrel/ext/http/ 

Ahora edita el http11.c :

 #ifndef RSTRING_PTR #define RSTRING_PTR(s) (RSTRING(s)) #endif #ifndef RSTRING_LEN #define RSTRING_LEN(s) (RSTRING(s)) #endif 

Guárdalo y ahora desde el mismo directorio haz lo siguiente:

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

¡Hecho!

Puede forzar la instalación de mestizo como este

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

Esto resuelve el problema.