Lorsque je cours Devel::Cover
avec ModPerl::Registry
, je ne reçois aucune information de couverture, sauf pour blocs. Lorsque je cours le même script avec Devel::Cover
à partir de la ligne de commande ou en tant que CGI, tout fonctionne bien (évidemment).Aucune couverture pour l'exécution avec Devel :: Cover et ModPerl :: Registry
Comment puis-je faire Devel::Cover
"voir" mon code en cours d'exécution dans le runtime?
est ici Devel::Cover
choses connexes dans mon httpd.conf
:
MaxClients 1
PerlSetEnv DEVEL_COVER_OPTIONS -db,/tmp/cover_db,-silent,1
PerlRequire /var/www/project/startup.pl
est ici startup.pl
:
#!/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;
(Comme vous pouvez le voir, j'ai fait un patch de singe pour Devel::Cover
depuis startup.pl
est dirigé par root
, mais les processus de travail s'exécutent sous un utilisateur différent, et sinon ils ne pourraient pas lire les répertoires créés par startup.pl
Si vous connaissez une meilleure solution, faites une note, Essayez.
'-X' peut-être, mais ne limiterait pas' MaxRequestsPerChild' réellement rendre vos données de couverture se terminent plus tôt que vous le voudriez? – Kev