gpt4 book ai didi

perl - 将 Dancer2 应用程序作为 cgi-script 运行时的 HTTP 504 网关超时

转载 作者:行者123 更新时间:2023-12-04 04:35:35 25 4
gpt4 key购买 nike

我正在尝试使用 Apache 将 Dancer2 应用程序部署为 cgi 脚本。我按照 instructions in the Dancer2 deployment guide 作为 cgi 脚本运行,但是当我尝试在浏览器中访问我的应用程序时,我收到 HTTP 504 网关超时。

我是 PSGI/Plack 世界的新手,所以我的诊断可能还很遥远,但是当我请求时看起来像
http://<hostname>/
从远程主机,dispatch.cgi 启动一个服务器,监听端口 3000,然后就坐在那里等待输入,直到请求超时。这是我在 Apache 错误日志中看到的内容:

[Mon Nov 04 09:44:32 2013] [error] [client 128.117.20.57] [ip2map:30142]  core @2013-11-04 09:44:32> Registered Dancer2::Core::DSL__WITH__Dancer2::Plugin::Ajax=HASH(0x3414560) in /var/www/ip2map/public/../lib/ip2map.pm l. 3
[Mon Nov 04 09:44:32 2013] [error] [client 128.117.20.57] [ip2map:30142] core @2013-11-04 09:44:32> Registered Dancer2::Core::DSL__WITH__Dancer2::Plugin::Ajax__WITH__Dancer2::Plugin::Database=HASH(0x3414560) in /var/www/ip2map/public/../lib/ip2map.pm l. 4
[Mon Nov 04 09:44:32 2013] [error] [client 128.117.20.57] >> Dancer2 v0.10 server 30142 listening on http://0.0.0.0:3000
[Mon Nov 04 09:44:32 2013] [error] [client 128.117.20.57] >> Dancer2::Plugin::Ajax (0.10)
[Mon Nov 04 09:44:32 2013] [error] [client 128.117.20.57] >> Dancer2::Plugin::Database (2.10)
[Mon Nov 04 09:45:32 2013] [warn] [client 128.117.20.57] Timeout waiting for output from CGI script /var/www/ip2map/public/dispatch.cgi
[Mon Nov 04 09:45:32 2013] [error] [client 128.117.20.57] Script timed out before returning headers: dispatch.cgi

这是我的 Apache 配置(Apache v2.2.15):
NameVirtualHost *:80

<VirtualHost *:80>
ServerName mcmes21.cgd.ucar.edu
ServerAlias mcmes21
DocumentRoot /var/www/ip2map/public
ServerAdmin mcarey@ucar.edu

<Directory "/var/www/ip2map/public">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
AddHandler cgi-script .cgi
</Directory>

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /dispatch.cgi$1 [QSA,L]

ErrorLog /var/log/httpd/ip2map-error_log
CustomLog /var/log/httpd/ip2map-access_log common
</VirtualHost>

请注意,当通过 mod_proxy 使用以下 Apache 配置与 Starman 一起使用时,我的应用程序工作正常:
NameVirtualHost *:80

<VirtualHost *:80>
ServerName mcmes21.cgd.ucar.edu
ServerAlias mcmes21

DocumentRoot /var/www/ip2map

<Proxy *>
Order deny,allow
Allow from all
</Proxy>

ProxyPass / http://localhost:5000/
ProxyPassReverse / http://localhost:5000/
</VirtualHost>

有谁知道我如何让它作为 CGI 工作?

注意:我昨天也在舞者用户邮件列表中发布了这个问题。

最佳答案

使用以下命令配置 Apache 以使用 mod_perl 运行 Dancer 应用程序。这比 CGI 快得多。

  • 安装 mod_perl,如果尚未安装:
     sudo apt-get install libapache2-mod-perl2
  • 安装 Plack and Dancer(如果尚未安装):
     sudo apt-get install libplack-perl
    sudo apt-get install libdancer-perl
  • 将以下内容添加到 apache 中的站点配置中(通常在 ../sites-available 中)。在下面的代码片段中,我使用/home/user/dancerapp 作为您的 dancer 应用程序的绝对路径,并使用“dancerapp.com”作为您的服务器名称。请务必更改为您的应用程序:
     <VirtualHost *:80>

    ServerName dancerapp.com

    DocumentRoot /home/user/dancerapp/public

    <Location />
    SetHandler perl-script
    PerlResponseHandler Plack::Handler::Apache2
    PerlSetVar psgi_app /home/user/dancerapp/bin/app.pl
    SetEnv DANCER_ENVIRONMENT "production"
    </Location>

    <Perl>
    use Plack::Handler::Apache2;
    Plack::Handler::Apache2->preload("/home/user/dancerapp/bin/app.pl");
    </Perl>

    </VirtualHost>
  • 记得重启apache:
      sudo /etc/init.d/apache2 restart
  • 关于perl - 将 Dancer2 应用程序作为 cgi-script 运行时的 HTTP 504 网关超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19798002/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com