¿Cómo configuro Apache con FastCGI y Ruby?

9

He estado leyendo muchas publicaciones en el foro, tutoriales, etc., sobre cómo configurar apache en Linux con fastcgi. Estoy tratando de ejecutar fcgi para algunos de mis desarrollos de ruby ​​(no rails), pero creo que debería aplicarse a cualquier idioma. Tenga en cuenta que ya tengo apache, fastcgi, ruby-fcgi y similares ya instalados en mi web box.

Conceptualmente, me está costando mucho. ¿Apache genera los procesos de fcgi especificados según sea necesario? ¿Los empiezo al lado de apache? Básicamente, estoy tratando de llegar a un punto en el que pueda hacer las preguntas adecuadas, por lo que me disculpo si el título es engañoso.

sdellysse
fuente

Respuestas:

9

Bueno, mientras tanto, descubrí esto. Como no hubo una redacción concisa sobre este tema, aquí está el comienzo de una. Cuando haya solucionado todos los errores, enviaré esto a algunos sitios de tutoriales.

  1. Asegúrese de que el módulo base fastcgi apache esté instalado. Si usa ArchLinux como lo hago, mod_fcgid en el aur funciona. En otras distribuciones, instale mod_fcgid o mod_fastcgi. (Para aquellos que se preguntan la diferencia, no creo que haya mucho, así que elegí el que tiene más actividad).

  2. En su archivo httpd.conf, active el módulo agregando una línea al comienzo de sus definiciones de LoadModule. No estoy seguro de si importa qué distribuciones, pero en Arch eraLoadmodule fcgid_module modules/mod_fcgid.so

  3. Agregue una nueva sección a su httpd.conf. Puse esto justo debajo de la sección cgid_module, pero estoy bastante seguro de que la ubicación sería arbitraria.

    <IfModule fcgid_module>
      AddHandler fcgid-script .fgci
    </IfModule>
    
  4. Ahora, según tengo entendido, cualquier archivo que tenga la extensión .fcgi en un directorio marcado ExecCGI ahora será manejado por el módulo fastcgi que se instaló. Instalé este paquete para darle a Ruby los enlaces fastcgi, dentro de un directorio ExecCGI, escribí este script de pruebatest.rb.fcgi

    #!/usr/bin/ruby -w
    require 'fcgi'
    
    count = 0
    FCGI.each_cgi do
      puts "Content-type: text/html\n\n"
      puts "Hello, Ruby! FastCGI(#{count})"
      count = count + 1
    end
    

Ahora, cuando vaya a esa página en su navegador, ya que countestá fuera del ciclo fastcgi, debería incrementarse con cada vista de página. Si es así, fcgi está configurado correctamente.

sdellysse
fuente
1
Argh. Markdown me está dando algunos problemas reales con esta publicación.
sdellysse
Su código fue incrustado en una lista, por lo que 4 espacios de sangría no son suficientes. Lo hice funcionar con 8 espacios.
Augustin
1
Interesante. Entonces, uno podría manejar archivos .rb limpios con una <Directory>directiva en un <VirtualHost>contexto, digamos - AddHandler fcgi-script .rby FCGIWrapper /path/to/ruby .rb(para eliminar el requisito de hashbang para los scripts web). Y tal vez Options ExecCGI. Podría darle una oportunidad a esto.
Benji XVI
en ArchLinux, 'mod_fcgid' ahora está disponible en extras, fuera de AUR
Aaron Thomas
1

Debe considerar el uso de Passenger para manejar su aplicación de rieles (incluso si no está utilizando ninguna función de rieles como ActiveRecord, etc.). Hay muchos sitios web que se ejecutan en él (además tienen Rails Enterprise, menos memoria, mejor rendimiento)

Zepplock
fuente
Como se especifica en la pregunta, no estoy usando rieles. Pero gracias de cualquier manera.
sdellysse
1
Para el registro: Phusion Passenger no solo ejecuta aplicaciones Rails. También es compatible con Rack. Entonces, si su aplicación web usa Rack, puede intentar implementarla con Phusion Passenger.
joschi
1

¿Apache genera los procesos de fcgi especificados según sea necesario? ¿Los empiezo al lado de apache?

Apache los engendrará por ti. Puede establecer un número mínimo y máximo de procesos para generar en su httpd.conf, y generará otros nuevos y eliminará los obsoletos según el volumen de solicitudes entrantes. Siempre que reciba solicitudes, su proceso seguirá ejecutándose.

user44700
fuente
0

Apache debería generarlos utilizando la interfaz fastcgi. Sin embargo, los dejará en funcionamiento durante algún tiempo y se espera que cada proceso maneje más de una solicitud antes de que Apache lo finalice.

Michael Graff
fuente