如何在没有Apache的情况下运行Perl CGI脚本?

6

我如何在没有apache的情况下运行我的perl CGI脚本?这是用于测试目的,所以某种一次只处理一个请求的单进程服务器对我来说应该足够了。


1
为什么你不想使用Apache呢?在预期的生产环境中进行测试,不使用类似的环境似乎有些奇怪。 - Rowland Shaw
脚本应该以特定用户身份运行,目前我不想在测试Apache上设置suexec。 - Egor Makarov
是的,我正在使用CGI.pm。但是..这有关系吗? - Egor Makarov
1
在CGI.pm下,您可以从命令行运行,因此不需要Web服务器。请参阅我的答案。 - user181548
4个回答

5
Plack::App::WrapCGIPlack::App::CGIBin 代表了一种实现这一功能的方式(与 plackup 和默认单线程 Plack HTTP 服务器一起使用),但它们并没有在 CGI 期望运行的上下文中(独立进程)运行 CGIs,所以不是完全美观的(与使用 modperl registry 相同的注意事项适用,或多或少)。我不知道是否有一个纯 Perl Web 服务器实际上分叉并作为 CGI 运行(也没有非 Perl 的 Web 服务器需要零配置来运行 CGI,尽管 lighttpd 接近)。
“你是否正在使用 CGI.pm” 是一个相关的问题,因为如果您还没有开始应用程序,您可能想考虑编写针对几乎 任何其他 应用程序的内容。

(随机排列以隐藏我明显的偏见),并且能够轻松地将相同的应用程序作为独立的HTTP服务器、FastCGI、mod_perl应用程序或纯CGI运行,而不会出现编写CGI.pm接口时出现的阻抗失配问题。


好的,也许我会尝试使用Web::Simple来编写那个脚本(它非常简单,所以我不认为特定的框架会对我有太大帮助)。无论如何,我找到了一个非常简单的解决方案来解决最初的问题 - "python -m CGIHTTPServer 8080" 将会将 'cgi-bin' 子文件夹中的脚本作为CGI进行服务。 - Egor Makarov

4

由于您在评论中提到了使用CGI.pm,请注意,CGI.pm提供了一系列选项,可用于从命令行运行CGI脚本。请参见http://perldoc.perl.org/CGI.html#DEBUGGING。即使没有CGI.pm,您也可以伪造必要的环境变量并将文件导入。基本上,您只需要设置一下即可从命令行运行CGI。

 QUERY_STRING = blah=x&fu=bar

对于GET方法,或者

 CONTENT_LENGTH = length of your file

对于POST方法。


将输出导入文件并使用网络浏览器打开该文件。 - user181548
你还需要设置 REQUEST_METHOD(=GET/POST),至少我的CGI.pm在没有它的情况下无法理解请求。 - Dallaylaen

1
脚本应该以特定用户身份运行,目前我不想在测试Apache上设置suexec。
除了要运行httpd的用户、绑定到的接口/端口以及可能的cgi-bin目录之外,没有任何阻止您复制必需的Apache配置并运行单独的httpd副本(使用-f选项)来测试应用程序在其应该运行的环境中的最安全方式。
请参见Starting Apache

it is possible to specify its location at run time using the -f command-line option as in

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

0

获取一个虚拟机,随心所欲地使用它,包括运行Apache。尽可能复制您的目标设置。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接