Я пытался перейти от использования PerlSetEnv к использованию пользовательских директив конфигурации . У меня есть мой конфигурационный модуль с копией set_val
из документации:
sub set_val
{
local our ($key, $self, $parms, $arg) = @_;
$self->{$key} = $arg;
unless ($parms->path)
{
local our $srv_cfg = Apache2::Module::get_config($self, $parms->server);
$srv_cfg->{$key} = $arg;
}
}
... который вызывается каждой пользовательской директивой sub. Тогда у меня в .conf:
PerlLoadModule MyModule::ServerConfig
MyCustomDirective 'hello'
Это прекрасно работает, так как httpd -t поддерживает синтаксис файла. Проблема в том, что я не могу получить значение из файла конфигурации из блока BEGIN, что мне нужно сделать.
Я пытался возиться со всеми видами вещей:
BEGIN
{
use Apache2::CmdParms ();
# use Apache2::Directive ();
use Apache2::Module ();
# use Apache2::ServerUtil ();
# use Apache2::RequestUtil ();
use Data::Dump;
warn ddx(Apache2::Module::get_config('MyModule::ServerConfig', Apache2::CmdParms->server));
# warn ddx(Apache2::Directive->as_hash);
# warn Apache2::ServerUtil->dir_config('MyCustomDirective);
# warn Apache2::CmdParms->server->server_hostname();
}
... но безрезультатно. Большинство моих усилий (например, попытки доступа к CmdParms->server
) приводят к Parent: child process exited with status 3221225477 -- Restarting
и автоматическому перезапуску Apache. Если я передаю ServerUtil->server to get_config()
, сервер остается в живых, но в предупреждении выводится только «1».
Я где-то читал, что это потому, что вы не можете получить что-либо связанное с запросом в блоке BEGIN
, потому что запросы различаются. Это имеет смысл, за исключением того, что с PerlOptions + GlobalRequest я смог видеть $ENV
в пределах блока BEGIN
, так почему бы мне не увидеть мои собственные директивы, настолько же зависимые, насколько они зависят от запрос происходит? Особенно сбивает с толку то, что если я пытаюсь передать Apache2::RequestUtil->request->per\_dir\_config()
в get_config()
, он говорит Global $r object is not available.
Если это правда в блоке BEGIN
, как я могу получить в $ENV
?