Frage

Ich habe versucht, von den verschiedenen Geräten wechseln PerlSetEnv zur Verwendung von benutzerdefinierte Konfigurationsanweisungen . Ich habe meine Konfigurationsmodul mit einer Kopie des set_val aus der Dokumentation:

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

..., die durch jede individuelle Richtlinie Unter genannt wird. Dann habe ich in meinem Conf:

PerlLoadModule MyModule::ServerConfig
MyCustomDirective 'hello'

Das funktioniert in diesem httpd feinen -t der Datei Syntax okays. Das Problem ist, dass ich nicht auf dem Wert aus der Konfigurationsdatei zu bekommen scheint aus einem BEGIN-Block, die ich tun muß.

Ich habe mit allen möglichen Dingen versucht bastelt:

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

... aber ohne Erfolg. Die meisten meiner Bemühungen (versucht CmdParms->server zum Beispiel zuzugreifen) führt in Parent: child process exited with status 3221225477 -- Restarting und einen automatischen Neustart von Apache wie es sagt. Wenn ich ServerUtil->server to get_config() passieren, bleibt der Server am Leben, aber die Warnung nur ausdruckt ‚1‘.

Ich habe irgendwo gelesen, dass dies, weil Sie nicht auf irgendetwas Anfrage bezogene innerhalb eines BEGIN Block bekommen, weil die Anforderungen variieren. Es macht Art von Sinn, mit der Ausnahme, dass mit PerlOptions + GlobalRequest ich in der Lage gewesen $ENV innerhalb eines BEGIN Block zu sehen, also warum sollte ich meine eigenen Richtlinien nicht in der Lage sein zu sehen, ebenso angewiesen, wie sie sind, wie die Anfrage passiert? Besonders verwirrend ist, dass wenn ich versuche Apache2::RequestUtil->request->per\_dir\_config() zu get_config() passieren, heißt es Global $r object is not available. Wenn das in einem BEGIN Block wahr ist, wie es ist, ich $ENV bekommen kann?

War es hilfreich?

Lösung 2

Zum Teil Dump wird nicht korrekt verwendet. Das funktioniert besser:

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

Allerdings ist es keine Richtlinien zeigen, die in erscheinen Blöcke.

In meinem speziellen Fall, aber ich brauche nicht, dass die Funktionalität, auf dem zweiten Gedanken; das geschieht nur zu sein, wo ich sie gesteckt hatte.

Andere Tipps

Versuchen Sie hinzufügen, was Sie Funktion zu anderen Modul import wollen und dieses Modul in Code use, wo Sie in der Regel BEGIN Block setzen. Es sollte gleiche Arbeit. sein kann, es hilft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top