2009-10-13 9 views
5

Realmente quiero ejecutar algunos códigos ruby ​​en el servidor Apache. Tengo libapache2-mod-ruby y libapache-ruby1.8 instalados (la lista completa de lo que está instalado es here). ¿Qué debo hacer ahora para que se ejecute (here`s como ejemplo)?Ruby en Apache con mod_ruby

Respuesta

2

mod-ruby no es realmente la forma preferida de ir en la comunidad de ruby.

La manera más fácil para que pueda comenzar a instalar el pasajero (a través de gema) y configurar apache para usarlo.

Es muy fácil de hacer,

que puede seguir el tutorial oficial aquí: http://www.modrails.com/install.html

+2

Pasajero parece ser para Rails - ¿eso es lo que quiere @folone? –

+0

Estoy con Brent. Hay muchos usos para insertar Ruby en medio de una solicitud de Apache (autenticación, autorización, reparación de solicitudes mal formadas, etc.) en lugar de como el adaptador de punto final, es decir, lo que Passenger + Rails hacen juntos. –

3

Aquí hay una quick howto para obtener mod_ruby en funcionamiento. Un breve resumen de los pasos que he utilizado en Ubuntu 12.04 se replica aquí:

Instalar mod_ruby para apache:

sudo apt-get install libapache2-mod-ruby 

Para habilitar mod_ruby para todos los archivos en/var/www, edite el archivo de configuración de Apache, es decir, /etc/apache2/sites-enabled/000-default

he tenido que añadir a +ExecCGIOptions, y añadir la sección perteneciente a Ruby:

<Directory /var/www/> 
    Options Indexes +ExecCGI 

    # Ruby with mod_ruby 
    RubyRequire apache/ruby-run 
    <Files *.rb> 
     SetHandler ruby-object 
     RubyHandler Apache::RubyRun.instance 
     AddType text/html rb 
    </Files> 
</Directory> 

El principal inconveniente que veo es que parece que no puedo encontrar una manera de establecer el tipo de mimo/contenido desde dentro del script. Debe configurarlo globalmente para todos los scripts de ruby ​​con la directiva AddType text/html rb.

Finalmente, necesita un script de prueba en/var/www y debe ser ejecutable. Por ejemplo, tengo /var/www/test.rb:

#!/usr/bin/ruby 

puts "Hello World!<br><pre>" 

ENV.each { |k,v| 
    puts "#{k}=#{v}" 
} 

puts "</pre>" 

No se olvide de hacerlo ejecutable:

chmod a+x /var/www/test.rb 

Y esta salidas:

Hello World! 
HTTP_HOST=10.0.1.3 
HTTP_CONNECTION=keep-alive 
HTTP_CACHE_CONTROL=max-age=0 
HTTP_ACCEPT=text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
HTTP_USER_AGENT=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36 
HTTP_ACCEPT_ENCODING=gzip,deflate,sdch 
HTTP_ACCEPT_LANGUAGE=en-US,en;q=0.8 
HTTP_COOKIE=__test=1; 
PATH=/bin:/usr/bin:/usr/ucb:/usr/bsd:/usr/local/bin 
SERVER_SIGNATURE= 
Apache/2.2.22 (Ubuntu) Server at 10.0.1.3 Port 80 

SERVER_SOFTWARE=Apache/2.2.22 (Ubuntu) 
SERVER_NAME=10.0.1.3 
SERVER_ADDR=10.0.1.3 
SERVER_PORT=80 
REMOTE_ADDR=10.0.1.3 
DOCUMENT_ROOT=/var/www 
[email protected] 
SCRIPT_FILENAME=/var/www/test.rb 
REMOTE_PORT=38188 
SERVER_PROTOCOL=HTTP/1.1 
REQUEST_METHOD=GET 
REQUEST_URI=/test.rb 
SCRIPT_NAME=/test.rb 
MOD_RUBY=mod_ruby/1.2.6 
GATEWAY_INTERFACE=CGI-Ruby/1.1 

me he encontrado un punto de referencia Apache en mod_ruby contra Ruby simple como CGI (que hace girar el intérprete de Ruby cada solicitud) y mod_ruby fue aproximadamente 8 veces más rápido y a la par con el rendimiento de PHP.