Domanda

Ho provato a passare dall'uso di PerlSetEnv all'utilizzo di custom direttive di configurazione . Ho il mio modulo di configurazione con una copia di set_val dai documenti:

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

... che viene chiamato da ogni sub direttiva personalizzata. Quindi ho nel mio .conf:

PerlLoadModule MyModule::ServerConfig
MyCustomDirective 'hello'

Funziona bene in quanto httpd -t va bene la sintassi del file. Il problema è che non riesco a ottenere il valore dal file di configurazione da un blocco BEGIN, cosa che devo fare.

Ho provato ad armeggiare con ogni sorta di cose:

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

... ma inutilmente. La maggior parte dei miei sforzi (tentando di accedere a CmdParms->server per esempio) si traducono in Parent: child process exited with status 3221225477 -- Restarting e un riavvio automatico di Apache come dice. Se passo ServerUtil->server to get_config(), il server rimane attivo ma l'avviso stampa solo "1".

Ho letto da qualche parte che ciò è dovuto al fatto che non è possibile ottenere nulla relativo alle richieste in un blocco BEGIN, poiché le richieste variano. In un certo senso ha senso, tranne per il fatto che con PerlOptions + GlobalRequest sono stato in grado di vedere $ENV all'interno di un blocco Apache2::RequestUtil->request->per\_dir\_config(), quindi perché non dovrei essere in grado di vedere le mie direttive, tanto quanto dipendono da come la richiesta accade? Particolarmente confuso è che se provo a passare da get_config() a Global $r object is not available., dice <=> Se questo è vero in un blocco <=>, come posso arrivare a <=>?

È stato utile?

Soluzione 2

In parte, Dump non viene utilizzato correttamente. Funziona meglio:

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

Tuttavia, non mostra alcuna direttiva che appare all'interno di < Directory > blocchi.

Nel mio caso particolare, tuttavia, non ho bisogno di quella funzionalità, ripensandoci; quello sembra essere il punto in cui li avevo bloccati.

Altri suggerimenti

Prova ad aggiungere ciò che vuoi import ad un altro modulo e use questo modulo nel codice in cui di solito metti BEGIN blocco. Dovrebbe funzionare lo stesso. Può essere utile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top