【问题标题】:How can I run my perl CGI script without apache?如何在没有 apache 的情况下运行我的 perl CGI 脚本?
【发布时间】:2010-04-08 02:03:50
【问题描述】:

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

【问题讨论】:

  • 你为什么不想使用 Apache?不在与预期生产环境类似的环境中进行测试似乎很奇怪。
  • 脚本应该以特定用户身份运行,目前我不想在测试 apache 时设置 suexec。
  • 是的,我正在使用 CGI.pm。但是..这有关系吗?
  • 在 CGI.pm 下,您可以从命令行运行,因此您不需要 Web 服务器。请看我的回答。

标签: perl cgi


【解决方案1】:

Plack::App::WrapCGIPlack::App::CGIBin 代表一种方法(连同plackup 和默认的单线程 Plack HTTP 服务器),但它没有在他们真正期望运行的上下文中运行 CGI(a独立进程),因此它并不完全漂亮(与使用 modperl 注册表相同的警告或多或少适用)。我不知道有一个纯 perl 网络服务器实际上将 CGI 作为 CGI 进行分叉和运行(也不是一个执行 CGI 并且需要零配置的非 perl 网络服务器,尽管 lighttpd 很接近)。

“您是否在使用 CGI.pm”是一个相关问题的原因是,如果您尚未启动应用程序,您可能需要考虑针对其他任何东西进行编写,例如

(以随机顺序隐藏我明显的偏爱)并获得能够轻松运行与独立 HTTP 服务器、FastCGI、mod_perl 应用程序或普通 CGI 相同的应用程序(如果推送到了紧要关头),并且不会出现阻抗不匹配的情况写入 CGI.pm 的界面时获取

【讨论】:

  • 好吧,也许我会为那个脚本尝试 Web::Simple (它非常简单,所以我认为特定的框架对我没有多大帮助)。无论如何,我发现初始问题的解决方案非常简单——“python -m CGIHTTPServer 8080”会将“cgi-bin”子文件夹中的脚本作为 CGI 提供。
【解决方案2】:

由于您在 cmets 中提到您正在使用 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 方法。

【讨论】:

  • 管道输出到一个文件中并使用网络浏览器打开文件。
  • 你还需要设置REQUEST_METHOD (=GET/POST),至少我的CGI.pm没有它就无法理解请求。
【解决方案3】:

脚本应该以特定用户身份运行,目前我不想在测试apache 时设置suexec

除了运行httpd 的用户、要绑定的接口/端口以及可能的cgi-bin 目录和运行@ 的单独副本之外,没有什么可以阻止您复制必需的Apache 配置987654326@(带有-f 选项)。这将是在应该运行的环境中测试应用程序的最安全方法。

Starting Apache:

可以在运行时使用-f 命令行选项指定其位置

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

【讨论】:

    【解决方案4】:

    给自己弄个虚拟机,用它做任何你想做的事,包括运行 apache。尽可能多地复制目标设置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-05
      • 1970-01-01
      • 1970-01-01
      • 2010-10-08
      相关资源
      最近更新 更多