我需要在一家托管公司工作得很好的梅森网站上做一些维护,但需要转移到另一家托管公司.新的托管公司不支持ApacheHandler,所以我将代码更改为CGIHandler.
不幸的是,我不再将QUERY_STRING元素填充到泥瓦匠环境中,这使得它有点难!
我从这里获得了大量的处理程序代码:http://joe.pepersack.net/code/site-mason_handler.pl
处理程序正在设置如下:
$h = HTML::Mason::CGIHandler->new(
comp_root => $mason_root,
data_dir => $mason_data,
allow_globals => $::MASON_GLOBALS,
error_mode => "output",
default_escape_flags => "h"
);
一般搜索互联网并没有给我带来任何好处……
有谁知道ApacheHandler和CGIHandler之间的参数传递是否存在差异?如果他们被其他地方吃掉了,我怎么能测试CGIHandler是否首先找到了params?
任何帮助(或其他主要问题)都将非常感激.这个网站是为青少年筹集资金的,因此目前没有太多时间/支持重写它.
最佳答案 根据这个
http://marc.info/?l=mason&m=96320172801620&w=3)和我的经验,它应该在$ENV {QUERY_STRING}中提供.
也许您的设置已经厌倦了直接从Apache :: Request使用它,或者CGI服务器没有自动设置它?
从http://cpansearch.perl.org/src/JSWARTZ/HTML-Mason-1.46/htdocs/CGIHandler.html开始:
This module also provides an $r request object for use inside
components, similar to the Apache request object under
HTML::Mason::ApacheHandler, but limited in functionality.
基于此:http://redmine.lighttpd.net/projects/lighttpd/wiki/MasonRecipe/11
### this seems to be necessary as lighttpd does not provide the PATH_INFO and the QUERY_STRING environment variables
## right' way to parse the REQUEST_URI out into PATH_INFO and QUERY_STRING
my $uri = $ENV{REQUEST_URI};
if ($uri =~ /\?/) {
$uri =~ /^(.*?)\?(.*)/;
$ENV{PATH_INFO} = $1;
$ENV{QUERY_STRING} = $2;
} else {
$ENV{PATH_INFO} = $uri;
$ENV{QUERY_STRING} = "";
}