2013-10-17 4 views
34

मैं Plack::App::CGIBin को फ्रीबीएसडी 8.2 पर अपाचे 2 और फास्टसीजीआई का उपयोग करने के लिए काम करने की कोशिश कर रहा हूं। अंतिम उद्देश्य इस मिडलवेयर क्षमताओं का लाभ उठाने के लिए, प्लाक के माध्यम से विरासत सीजीआई स्क्रिप्ट्स के पूरे समूह की सेवा के लिए इस सेटअप का उपयोग करने में सक्षम होना है, लेकिन मैं काम करने के लिए एक सरल उदाहरण भी प्राप्त नहीं कर पाया है।प्लेक :: ऐप :: सीपीआईबीन अपाचे और mod_fastcgi के माध्यम से - सीजीआई स्क्रिप्ट नहीं मिली

मैंने Plack::Handler::FCGI और Plack::App::CGIBin पर सीपीएएन दस्तावेज का पालन किया है, लेकिन मुझे यकीन नहीं है कि मुझे कुछ याद आ रहा है या कुछ गलत कर रहा है जो उन दस्तावेज़ों द्वारा कवर नहीं है।

यह अपाचे config मैं जोड़ दिया है:

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

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

कमान बाहरी सर्वर को चलाने के लिए:

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

सर्वर सफलतापूर्वक शुरू होता है, निम्नलिखित लौटने:

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

यह 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; 
}; 

मेरे पास /data/www/plack/test.cgi पर एक साधारण सीजीआई स्क्रिप्ट है (यह फ़ाइल CGI.pm के तहत ठीक है)।

मुझे उम्मीद है कि http://<domain>/plack/test.cgi/ (पिछला स्लैश समेत) का अनुरोध टेस्ट स्क्रिप्ट वापस करेगा, लेकिन मुझे हमेशा अपाचे त्रुटि लॉग में निम्न 404 त्रुटि मिलती है, जो मुझे लगता है कि फास्टसीजीआई से वापस आ रहा है सर्वर:

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

मैं अपने दम पर काम कर FastCGI मिल गया है, mod_fastcgi और SetHandler fastcgi-script के साथ एक निर्देशिका लागू किया में एक सरल उदाहरण स्क्रिप्ट का उपयोग कर, तो कम से कम है कि :-) काम किया।

क्या किसी को भी इसी तरह के परिदृश्य के तहत Plack::App::CGIBin मिल रहा है? मैं किसी भी अंतर्दृष्टि की सराहना करता हूं!

धन्यवाद

+0

शायद यह सॉकेट फ़ाइल के बजाय एक टीसीपी सर्वर का उपयोग करने में मदद करता है, उदाहरण के लिए FastCgiExternalServer निर्देश '-host 127.0.0.1: 5001' और plackup cmdline '-listen 127.0.0.1: 5001' में। –

+0

आपके उत्तर के लिए धन्यवाद स्लेवेन - दुर्भाग्य से मुझे अभी भी वही त्रुटि मिलती है, जो बताती है कि सॉकेट कनेक्शन, हालांकि यह स्थापित है, ठीक है, और यह एफसीजीआई सर्वर है जिसमें समस्या है। –

+0

पता नहीं है कि क्या आपने कभी इसके साथ कहीं भी जाना है, लेकिन लॉग इन GET अनुरोध '/ plack/placktest /' के लिए है, और मुझे नहीं लगता कि आप जिस चीज को उपनाम/plack के अलावा स्ट्रिंग placktest का उपयोग करते हैं/से - जो मुझे लगता है कि यह जीईटी अनुरोध में शामिल नहीं है। –

उत्तर

1

मुझे लगता है कि चाहते हैं आप

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

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

क्योंकि आपके उर्फ ​​/ plack को हटा रहा है/

या बस बदलने के बदलने की जरूरत है

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

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

सब के बाद करने के लिए यह एक पर्ल प्रश्न होने के लिए प्रकट नहीं होता है, लेकिन एक सिस्टम प्रशासक एक, अपाचे विन्यास के बारे में।

संबंधित मुद्दे