¿Cómo puedo acceder a la configuración del servidor Apache en un bloque BEGIN en mod_perl?

StackOverflow https://stackoverflow.com/questions/462824

Pregunta

He estado intentando cambiar de usar PerlSetEnv a usar directivas de configuración personalizadas.Tengo mi módulo de configuración con una copia de set_val de los documentos:

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;
    }
}

...que es llamado por cada subdirectiva personalizada.Luego tengo en mi .conf:

PerlLoadModule MyModule::ServerConfig
MyCustomDirective 'hello'

Esto funciona bien porque httpd -t aprueba la sintaxis del archivo.El problema es que parece que no puedo obtener el valor del archivo de configuración desde un bloque BEGIN, lo cual necesito hacer.

He intentado jugar con todo tipo de cosas:

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();
}

...pero fue en vano.La mayoría de mis esfuerzos (intentar acceder CmdParms->server por ejemplo) resultan en Parent: child process exited with status 3221225477 -- Restarting y un reinicio automático de Apache como dice.si paso ServerUtil->server to get_config(), el servidor permanece activo pero la advertencia solo imprime '1'.

Leí en alguna parte que esto se debe a que no se puede acceder a nada relacionado con solicitudes dentro de un BEGIN bloquear, porque las solicitudes varían.Tiene sentido, excepto que con PerlOptions +GlobalRequest he podido ver $ENV Dentro de un BEGIN bloquear, entonces, ¿por qué no podría ver mis propias directivas, tan dependientes de cómo ocurre la solicitud?Especialmente confuso es que si trato de pasar Apache2::RequestUtil->request->per\_dir\_config() a get_config(), dice Global $r object is not available. Si eso es cierto en un BEGIN bloquear, ¿cómo es que puedo llegar a $ENV?

¿Fue útil?

Solución 2

En parte, Dump no se está utilizando correctamente. Esto funciona mejor:

use Data::Dump qw(pp);
warn pp(Apache2::Module::get_config('MyModule::ServerConfig', Apache2::ServerUtil->server));

Sin embargo, no muestra ninguna directiva que aparezca dentro de < Directory > bloques.

En mi caso particular, sin embargo, no necesito esa funcionalidad, pensándolo bien; es solo donde los había pegado.

Otros consejos

Intente agregar lo que desea import funcionar a otro módulo y use este módulo en el código donde generalmente coloca el bloque BEGIN. Debería funcionar igual. Puede ser útil.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top