Come posso imparare DOCUMENT_ROOT in startup.pl sotto mod_perl2?
-
21-09-2019 - |
Domanda
Voglio imparare DOCUMENT_ROOT in startup.pl, ma il meglio che posso fare è quello di imparare server_root:
use Apache2::ServerUtil ();
$server_root = Apache2::ServerUtil::server_root();
che è del tutto inutile. Posso impostare una variabile d'ambiente con
SetPerlEnv DOCUMENT_ROOT /path/to/www
, ma non mi piace la configurazione in più, se possibile.
C'è un modo per ottenere DOCUMENT_ROOT con altri mezzi?
Soluzione
Apache2 :: direttiva . Per esempio, sul mio sistema di sviluppo:
use Apache2::Directive ();
my $tree = Apache2::Directive::conftree();
my $vhost = $tree->lookup(VirtualHost => 'unur.localdomain:8080');
File::Slurp::write_file "C:/bzzzt.txt", [ $vhost->{DocumentRoot}, "\n" ];
creato un file C:/bzzzt.txt
con il contenuto "E:/srv/unur/deploy/htdocs"
dopo ho scoperto che dovevo specificare il mio host virtuali utilizzando
<VirtualHost unur.localdomain:8080>
...
</VirtualHost>
<VirtualHost qtau.localdomain:8080>
...
</VirtualHost>
piuttosto che <VirtualHost *:8080>
. In caso contrario, ogni sezione è stata <VirtualHost *:8080>
sovrascrivendo la precedente.
Questo è fastidioso. Avrei pensato ogni voce VirtualHost
sarebbe stato digitato dal ServerName
utilizzato.
Per quanto riguarda se c'è un modo più semplice, temo che non v'è, se si vuole fare questo in startup.pl
. Tuttavia, non sono sicuro se è necessario farlo in startup.pl
. Si può scoprire la radice del documento durante l'elaborazione di una richiesta così utilizzando Apache2 :: :: RequestUtil document_root .
Se si esegue script del Registro di sistema , e vogliono cambiare per DOCUMENT_ROOT
, allora si dovrebbe essere in grado di aggiungere:
chdir $ENV{DOCUMENT_ROOT}
or die "Cannot chdir to '$ENV{DOCUMENT_ROOT}': $!";
allo script, invece di dover pasticciare con startup.pl
e gestori, ecc.