FastCGI 与 Carp fatalsToBrowser 不兼容?
我正在使用 FastCGI 开发 Perl 脚本(使用 CGI::Fast
和 CGI::Carp 'fatalsToBrowser')
。
当我的脚本出现编译错误时,它会导致浏览器挂起。看来 FatalsToBrowser 并没有像普通 CGI 那样工作(只是将编译错误发送到浏览器)。我该如何解决这个问题?
I am developing a Perl script using FastCGI (using CGI::Fast
and CGI::Carp 'fatalsToBrowser')
.
When my script has compile errors, it causes the browser to hang. It seems that fatalsToBrowser
is not working the way it does with normal CGI (just send the compile errors to the browser). How can I fix this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我无法为您提供解决方法,只能提供一个解释,FastCGI 的工作方式完全不同。当 CGI 应用程序执行时,在执行之前提供标准描述符和环境,在 FastCGI 应用程序中,服务器(应用程序)必须首先接受来自客户端(通常是 Web 服务器)的连接,并在接受请求和响应之前交换一些消息/记录可以发送。 CGI::Carp 在 perl 的编译阶段发挥了它的魔力,并假设在发生语法错误(编译阶段)时标准描述符可用,而这对于 CGI::Fast.pm 来说还为时过早。
我是 FCGI.pm(和 libfcgi)的维护者之一,所以我将与 CGI 维护者合作来解决这个问题。
I can not offer you a workaround but only an explanation, FastCGI works completely differently. When a CGI application is executed standard descriptors and environ is provided before execution, in a FastCGI application the server (application) must first accept a connection from the client (usually webserver) and exchange a few messages/records before a request is accepted and response can be sent. CGI::Carp does it's magic during perl's compile phase and assumes that standard descriptors is available when the syntax error occurs (compile phase) and that is to early for CGI::Fast.pm.
I'm one of the maintainers of FCGI.pm(and libfcgi) so I'll work with the CGI maintainers to get this resolved.
我是 CGI.pm 维护者。我建议在这种情况下避免使用“fatalsToBrowser”。一些 Perl 框架的功能具有相同的功能。例如,对于 CGI::Application 有 CGI::Application: :插件::调试屏幕。其他框架也有类似的东西。
在其他情况下,流行的“Carp”和“CGI::Carp”模块如果最终都导入到同一名称空间中,则可能会发生冲突,因为它们都提供具有相同名称的函数,例如“carp”和“croak”。我建议使用 Carp 并避免使用 CGI::Carp。
I'm the CGI.pm maintainer. I would recommend avoiding using 'fatalsToBrowser' in this case. Some Perl frameworks over features which do the same thing. For example, with CGI::Application there is CGI::Application::Plugin::DebugScreen. Other frameworks have something similar.
In other cases, the popular 'Carp' and 'CGI::Carp' modules can conflict if they both end up imported in the same name space, because they both provide functions with the same names, like 'carp' and 'croak'. I recommend using Carp and avoiding CGI::Carp.