2010-04-06 48 views
5

Làm cách nào để chạy tập lệnh CGI perl của tôi mà không cần apache? Điều này là dành cho mục đích thử nghiệm, vì vậy một số loại máy chủ xử lý đơn chỉ xử lý một yêu cầu đúng lúc là đủ cho tôi.Làm cách nào để chạy tập lệnh CGI perl của tôi mà không cần apache?

+0

Bạn có sử dụng CGI.pm không? –

+1

Tại sao bạn không muốn sử dụng Apache? Nó có vẻ kỳ lạ để không kiểm tra trong một môi trường tương tự như môi trường sản xuất dự định. –

+0

Kịch bản shoud được chạy như người dùng cụ thể và hiện tại tôi không muốn thiết lập suexec về thử nghiệm apache. –

Trả lời

1

Script shoud được chạy với tư cách người dùng cụ thể và hiện tại tôi không muốn thiết lập suexec khi thử nghiệm apache.

Không có gì ngăn cản bạn sao chép cấu hình Apache cần thiết, ngoại trừ cho người sử dụng, theo đó httpd sẽ được chạy, giao diện/cổng để ràng buộc vào và có thể là cgi-bin thư mục và chạy một bản sao riêng của httpd (với tùy chọn -f). Đó sẽ là cách an toàn nhất để kiểm tra ứng dụng trong môi trường mà nó được cho là chạy.

Xem Starting Apache:

người ta có thể xác định vị trí của nó tại thời gian chạy bằng cách sử dụng tùy chọn -f dòng lệnh như trong

/usr/local/apache2/bin/apachectl -f /usr/local/apache2/conf/httpd.conf 
5

Plack::App::WrapCGI hoặc Plack::App::CGIBin đại diện cho một trong những cách để làm điều này (cùng với plackup và máy chủ HTTP Plack đơn luồng mặc định) nhưng nó không chạy CGI trong bối cảnh họ thực sự mong muốn được chạy trong (một quá trình độc lập) vì vậy nó không hoàn toàn đẹp (cùng một điều kiện áp dụng như sử dụng modperl registry, nhiều hay ít). Tôi không nhận thức được một máy chủ web tinh khiết perl mà thực sự dĩa và chạy CGI như CGI (cũng không phải là một perl không CGI và yêu cầu không cấu hình, mặc dù lighttpd đến gần).

Lý do tại sao "bạn đang sử dụng CGI.pm" là một câu hỏi có liên quan là bởi vì nếu bạn chưa bắt đầu ứng dụng mà bạn có thể muốn xem xét viết chống lại khá nhiều bất cứ điều gì khác, ví dụ

(theo thứ tự ngẫu nhiên để che giấu sự thiên vị rõ ràng của tôi) một nd có khả năng dễ dàng chạy cùng một ứng dụng như một máy chủ HTTP độc lập, FastCGI, ứng dụng mod_perl, hoặc CGI đơn giản nếu push đến xô, và không có trở kháng không khớp mà bạn nhận được khi ghi vào giao diện CGI.pm

+0

Ok, có lẽ tôi sẽ thử Web :: Đơn giản cho kịch bản đó (nó khá đơn giản, vì vậy tôi không nghĩ rằng khung công cụ cụ thể sẽ giúp tôi nhiều). Dù sao, tôi đã tìm thấy giải pháp đơn giản cho vấn đề ban đầu - "python -m CGIHTTPServer 8080" sẽ phục vụ các tập lệnh trong thư mục con 'cgi-bin' như CGI. –

3

bạn đã đề cập trong các ý kiến ​​rằng bạn đang sử dụng CGI.pm, lưu ý rằng CGI.pm cung cấp một loạt các tùy chọn để chạy các script CGI từ dòng lệnh. Xem http://perldoc.perl.org/CGI.html#DEBUGGING. Ngay cả khi không có CGI.pm, bạn luôn có thể giả mạo các biến môi trường cần thiết và đường ống trong tệp của bạn. Về cơ bản tất cả các bạn cần làm để chạy một CGI từ dòng lệnh là để thiết lập

QUERY_STRING = blah=x&fu=bar 

cho các phương pháp GET, hoặc

CONTENT_LENGTH = length of your file 

cho các phương pháp POST.

+0

Trừ khi, bạn biết, bạn muốn sử dụng trình duyệt web ... – hobbs

+0

Gút đầu ra thành một tệp và mở tệp bằng trình duyệt web. –

+0

Bạn cũng cần đặt 'REQUEST_METHOD' (= GET/POST), ít nhất CGI.pm của tôi không hiểu yêu cầu mà không có nó. – Dallaylaen

0

Có được cho mình một máy ảo và làm bất cứ điều gì bạn như với nó, bao gồm cả chạy apache. Sao chép nhiều như thiết lập mục tiêu của bạn nhất có thể.

Các vấn đề liên quan