2013-10-17 14 views
34

Ich versuche Plack::App::CGIBin mit Apache2 und FastCGI unter FreeBSD 8.2 zu arbeiten. Das letztendliche Ziel ist es, in der Lage zu sein, eine ganze Reihe von Legacy-CGI-Skripten über Plack zu bedienen, um seine Middleware-Fähigkeiten zu nutzen, aber ich war nicht in der Lage, auch nur ein einfaches Beispiel zu bekommen.Plack :: App :: CGIBin über Apache und mod_fastcgi - CGI Skript nicht gefunden

Ich habe die CPAN-Dokumentation unter Plack::Handler::FCGI und Plack::App::CGIBin selbst gelesen, aber ich bin mir nicht sicher, ob ich etwas vermisse oder etwas falsch mache, was in diesen Dokumenten nicht behandelt wird.

Dies ist der Apache Config ich hinzugefügt haben:

# Set up external server 
FastCgiExternalServer /tmp/placktest.fcgi -socket /tmp/fcgi.socket 

# URL to be handled by FastCGI 
Alias /plack/ /tmp/placktest.fcgi/ 

Befehl externen Server ausführen:

plackup -s FCGI --listen /tmp/fcgi.socket /data/www/psgi/app.psgi 

Der Server erfolgreich gestartet wird, die folgende Rückkehr:

FastCGI: manager (pid <pid>): initialized 
FastCGI: manager (pid <pid>): server (pid <pid>) started 
FastCGI: server (pid <pid>): initialized 

Dies ist app.psgi:

#!/usr/bin/env plackup -s FCGI 

use Plack::App::CGIBin; 
use Plack::Builder; 

my $app = Plack::App::CGIBin->new(
    root => '/data/www/plack', 
)->to_app; 

builder { 
    mount "/plack" => $app; 
}; 

Ich habe dann ein einfaches CGI-Skript bei /data/www/plack/test.cgi (diese Datei läuft gut unter CGI.pm).

Was ich erwarten würde ist, dass eine Anfrage an http://<domain>/plack/test.cgi/ (einschließlich der abschließenden Schrägstrich) würde das Testskript zurückgeben, aber ich bekomme immer die folgenden 404 Fehler in der Apache-Fehlerprotokoll, die ich glaube, kommt von der FastCGI zurück Server:

FastCGI: server "/tmp/placktest.fcgi" stderr: <IP address/date>; "GET /plack/test.cgi HTTP/1.1" 404 9 "-" <User agent string>; 

ich habe FastCGI bekommt auf seinem eigenen Arbeit mit mod_fastcgi und einem einfachen Beispiel Skript in einem Verzeichnis mit SetHandler fastcgi-script angelegt, so zumindest den :-) gearbeitet.

Hat jemand Plack::App::CGIBin funktioniert unter einem ähnlichen Szenario? Ich würde jede Einsicht sehr schätzen!

Dank

+0

Vielleicht hilft es, wenn Sie einen TCP-Server anstelle der Socket-Datei verwenden, z. in der FastCgiExternalServer-Direktive '-host 127.0.0.1: 5001' und in der plack-cmdline' -listen 127.0.0.1: 5001'. –

+0

Vielen Dank für Ihre Antwort Slaven - leider bekomme ich immer noch den gleichen Fehler, was darauf hindeutet, dass die Socket-Verbindung, wie auch immer es etabliert ist, in Ordnung ist, und es ist der FCGI-Server, der das Problem hat. –

+0

Ich weiß nicht, ob du jemals irgendwo hingekommen bist, aber die geloggte GET-Anfrage ist für '/ plack/placktest /', und ich sehe nicht, wo du den string placktest anders als in dem, was du alias/plack benutzt/to - was mich denken lässt, dass es nicht in die GET-Anfrage gehört. –

Antwort

1

Ich würde vermuten, Sie

builder { 
    mount "/plack" => $app; 
}; 

zu

builder { 
    mount "/" => $app; 
}; 

weil Ihr Alias ​​ist das Entfernen/plack ändern müssen/

oder nur

ändern
# URL to be handled by FastCGI 
Alias /plack/ /tmp/placktest.fcgi/ 

zu

# URL to be handled by FastCGI 
Alias /plack/ /tmp/placktest.fcgi/plack/ 

Denn es scheint nicht eine Perl-Frage, sondern ein Systemadministrator ein, um Apache-Konfiguration zu sein.