我在尝试在 windows x64(Win 2008 R2 和 Windows 7)下使用 myapp_fastcgi.pl 脚本时遇到了 Calatylst 的问题。
由于某些原因,当我尝试通过 http 服务器访问脚本时,我得到“此应用程序遇到内部错误”(我在 IIS7.5 和 Apache 2.4 中都得到了这个)。为了找出问题所在,我在 DOS 控制台中运行了脚本,得到了以下信息:
Use of uninitialized value $value in pattern match (m//) at D:/perl/site/lib/Config/General.pm line 872.
Use of uninitialized value in concatenation (.) or string at D:/perl/site/lib/Plack/Handler/FCGI.pm line 114, <DATA> line 998.
Use of uninitialized value in quotemeta at D:/perl/site/lib/Plack/Handler/FCGI.pm line 116, <DATA> line 998.
Use of uninitialized value in string eq at D:/perl/site/lib/Catalyst.pm line 2770, <DATA> line 998.
Use of uninitialized value $host in substitution (s///) at D:/perl/site/lib/Catalyst/Engine.pm line 444, <DATA> line 998.
Use of uninitialized value $host in concatenation (.) or string at D:/perl/site/lib/Catalyst/Engine.pm line 451, <DATA> line 998.
Use of uninitialized value $host in concatenation (.) or string at D:/perl/site/lib/Catalyst/Engine.pm line 459, <DATA> line 998.
Use of uninitialized value in string eq at D:/perl/site/lib/Catalyst/Action/RenderView.pm line 51, <DATA> line 998.
binmode() on unopened filehandle GEN2 at D:/perl/site/lib/Plack/Handler/FCGI.pm line 165, <DATA> line 998.
print() on unopened filehandle GEN2 at D:/perl/site/lib/Plack/Handler/FCGI.pm line 177, <DATA> line 998.
Use of uninitialized value in string eq at D:/perl/site/lib/Catalyst.pm line 1817, <DATA> line 998.
print() on unopened filehandle GEN2 at D:/perl/site/lib/Plack/Handler/FCGI.pm line 179, <DATA> line 998.
我不介意初始化错误,因为在这种情况下,http 服务器设置的大多数环境都丢失了。然而,当我在 x32 环境(Windows XP)下尝试完全相同的脚本时,我得到以下输出,“GEN2”文件处理程序上的三个错误引起了我的兴趣:
<same init errors>
Use of uninitialized value in string eq at D:/Perl/site/lib/Catalyst/Action/RenderView.pm line 51, <DATA> line 998.
Status: 302 Found
Location: http:///login
Content-Length: 292
Content-Type: text/html; charset=utf-8
Set-Cookie: myapp_session=1e5994a41ea40c41764c4f2c0dc45592ef4b520f; path=/;
expires=Wed, 25-Apr-2012 17:14:25 GMT; HttpOnly
X-Catalyst: 5.90011
Use of uninitialized value in string eq at D:/Perl/site/lib/Catalyst.pm line 1817, <DATA> line 998.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/x
html1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Moved</title>
</head>
<body>
<p>This item has moved <a href="http:///login">here</a>.</p>
</body>
</html>
如果它工作正常,这听起来更像是我应该在我的 x64 环境中获得的东西。
在 FCGI.pm 模块中查看了一下提示我,由于某些原因 *STDIN 和 *STDOUT 在 x64 下未打开,但我不知道为什么,对此我没有错误。所以我来这里寻求任何建议或想法,或者如果有人以前遇到过这种问题并解决了它,我很想知道解决方案:)
关于我所做的测试的更多信息:
- 我对 x64 下的 myapp_server.pl 和 myapp_cgi.pl 没有任何问题,这些工作正常。
- 在 Windows 2008 R2 上卸载 Perl x64 并用 x32 版本替换它并不能解决它,我得到相同的 GEN2 错误(顺便说一下,我正在使用 ActivePerl)
- 我拥有所有测试的管理员权限,并且在 x64 环境中禁用了 UAC
提前致谢 !