Keine Abdeckung zur Laufzeit mit Devel :: Cover und ModPerl :: Registry
Wenn ich renneDevel::Cover
mitModPerl::Registry
, Ich erhalte keine Coverage-Informationen außerBEGIN
Blöcke. Wenn ich das gleiche Skript mit @ starDevel::Cover
von der Kommandozeile oder als CGI funktioniert alles in Ordnung (offensichtlich).
Wie kann ich @ machDevel::Cover
"sehe", wie mein Code zur Laufzeit ausgeführt wird?
Hier istDevel::Cover
verwandte Sachen in meinemhttpd.conf
:
MaxClients 1
PerlSetEnv DEVEL_COVER_OPTIONS -db,/tmp/cover_db,-silent,1
PerlRequire /var/www/project/startup.pl
Hier iststartup.pl:
<pre><code>#!/usr/bin/perl
use strict;
use warnings;
use Apache2::Directive ();
BEGIN {
# Devel::Cover database must be writable by worker processes
my $conftree = Apache2::Directive::conftree->as_hash;
my $name = $conftree->{User}
or die "couldn't find user in Apache config";
print "user=$name\n";
my $uid = getpwnam($name);
defined $uid
or die "couldn't determine uid by name";
no warnings 'redefine';
local $> = $uid;
require Devel::Cover;
my $old_report = \&Devel::Cover::report;
*Devel::Cover::report = sub { local $> = $uid; $old_report->(@_) };
Devel::Cover->import;
}
1;
</code></pre>
(As you may see, I made a monkey patch for <code>Devel::Cover</code> since <code>startup.pl</code> is being run by <code>root</code>, but worker processes run under a different user, and otherwise they couldn't read directories created by <code>startup.pl</code>. If you know a better solution, make a note, please.)