Wie richte ich Apache mit FastCGI und Ruby ein?

9

Ich habe viele Forenbeiträge, Tutorials usw. über das Einrichten von Apache unter Linux mit Fastcgi gelesen. Ich versuche, fcgi für einige meiner Ruby-Entwicklungen (nicht für Rails) auszuführen, aber ich denke, es sollte für jede Sprache gelten. Bitte beachten Sie, dass ich bereits Apache, Fastcgi, Ruby-Fcgi und dergleichen auf meiner Webbox installiert habe.

Konzeptionell fällt es mir schwer. Spawnt Apache die angegebenen fcgi-Prozesse nach Bedarf? Starte ich sie neben Apache? Grundsätzlich versuche ich, an einen Punkt zu gelangen, an dem ich die richtigen Fragen stellen kann. Ich entschuldige mich, wenn der Titel irreführend ist.

sdellysse
quelle

Antworten:

9

Nun, in der Zwischenzeit habe ich das herausgefunden. Da es zu diesem Thema keine kurze Beschreibung gab, ist hier der Anfang von einem. Wenn ich alle Fehler behoben habe, werde ich dies an einige Tutorial-Sites senden.

  1. Stellen Sie sicher, dass das Basis-Fastcgi-Apache-Modul installiert ist. Wenn Sie ArchLinux wie ich verwenden, funktioniert mod_fcgid auf dem aur . Installieren Sie in anderen Distributionen entweder mod_fcgid oder mod_fastcgi. (Für diejenigen, die sich über den Unterschied wundern, glaube ich nicht, dass es viel gibt, also habe ich mich für den mit mehr Aktivität entschieden.)

  2. Aktivieren Sie in Ihrer httpd.conf-Datei das Modul, indem Sie am Anfang Ihrer LoadModule-Definitionen eine Zeile einfügen. Ich bin mir nicht sicher, ob es darauf ankommt, welche Distributionen es sind, aber auf Arch war es dasLoadmodule fcgid_module modules/mod_fcgid.so

  3. Fügen Sie Ihrer httpd.conf einen neuen Abschnitt hinzu. Ich habe dies direkt unter den Abschnitt cgid_module gestellt, aber ich bin mir ziemlich sicher, dass der Speicherort beliebig ist.

    <IfModule fcgid_module>
      AddHandler fcgid-script .fgci
    </IfModule>
    
  4. Nach meinem Verständnis wird nun jede Datei mit der Erweiterung .fcgi in einem mit ExecCGI gekennzeichneten Verzeichnis von dem installierten fastcgi-Modul verarbeitet. Ich habe dieses Paket installiert , um Ruby die Fastcgi-Bindungen zu geben. In einem ExecCGI-Verzeichnis habe ich dieses Testskript geschriebentest.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
    

Wenn Sie nun in Ihrem Browser zu dieser Seite gehen count, sollte sie sich mit jeder Seitenansicht erhöhen , da sie sich außerhalb der Fastcgi-Schleife befindet. In diesem Fall ist fcgi korrekt eingerichtet.

sdellysse
quelle
1
argh. Markdown gibt mir einige echte Probleme mit diesem Beitrag.
Sdellysse
Ihr Code wurde in eine Liste eingebettet, daher reichen Einrückungen mit 4 Leerzeichen nicht aus. Ich habe es mit 8 Leerzeichen zum Laufen gebracht.
augustin
1
Interessant. Dann könnte man also ordentliche .rb-Dateien mit einer <Directory>Direktive in einem <VirtualHost>Kontext behandeln, sagen wir - AddHandler fcgi-script .rbund FCGIWrapper /path/to/ruby .rb(um die Hashbang-Anforderung für Web-Skripte zu entfernen). Und vielleicht Options ExecCGI. Könnte dies versuchen.
Benji XVI
In ArchLinux ist 'mod_fcgid' jetzt in Extras außerhalb von AUR verfügbar
Aaron Thomas
1

Sie sollten die Verwendung von Passenger für die Verwaltung Ihrer Schienenanwendung in Betracht ziehen (auch wenn Sie keine Schienenfunktionen wie ActiveRecord usw. verwenden). Es laufen viele Websites darauf (außerdem haben sie Rails Enterprise, weniger Speicher, bessere Leistung).

Zepplock
quelle
Wie in der Frage angegeben, verwende ich keine Schienen. Aber danke so oder so.
Sdellysse
1
Für die Aufzeichnung: Phusion Passenger führt nicht nur Rails-Anwendungen aus. Es unterstützt auch Rack. Wenn Ihre Webanwendung Rack verwendet, können Sie versuchen, sie mit Phusion Passenger bereitzustellen.
Joschi
1

Spawnt Apache die angegebenen fcgi-Prozesse nach Bedarf? Starte ich sie neben Apache?

Apache wird sie für Sie erzeugen. Sie können eine minimale und maximale Anzahl von Prozessen festlegen, die in Ihrer httpd.conf erzeugt werden sollen. Je nachdem, wie viele eingehende Anforderungen eingehen, werden neue Prozesse erzeugt und veraltete beendet. Solange Anfragen eingehen, läuft Ihr Prozess weiter.

user44700
quelle
0

Apache sollte sie über die Fastcgi-Oberfläche erzeugen. Sie werden jedoch einige Zeit ausgeführt, und es wird erwartet, dass jeder Prozess mehr als eine Anforderung verarbeitet, bevor er von Apache beendet wird.

Michael Graff
quelle