On Fri, 2007-04-27 at 10:19 +0200, Clinton Gormley wrote: > On Fri, 2007-04-27 at 09:43 +0200, Alicia Amadoz wrote: > > Hi, > > > > > [error] \n------------- EXCEPTION: Bio::Root::Exception > > -------------\nMSG: Can't locate Apache/SubProcess.pm in @INC (....)\n > > BEGIN failed--compilation aborted at (eval 47) line > > 2.\n\nApache::SubProcess module required for running under > > mod_perl\nSTACK: Error::throw\nSTACK: Bio::Root::Root::throw ... > > The error is that it can't locate Apache::SubProcess, but you're using > mod_perl 2, which uses Apache2::Subprocess. > > > Clint
I'm not familiar with bioperl, but doing a code search, it seems that Bio::DB::WebDBSeql has just (v 1.5.2) added the dependency on Apache::SubProcess, but purely as a way of cleaning up the environment after forking: http://doc.bioperl.org/releases/bioperl-1.5.2/Bio/DB/WebDBSeqI.html#CODE25 ---------------------------------------------------------------- sub _open_pipe { my ($self) = @_; if($ENV{MOD_PERL} and ! our $loaded_apache_sp) { eval 'use Apache::SubProcess'; $@ and $self->throw("[EMAIL PROTECTED]::SubProcess module required for running under mod_perl"); $loaded_apache_sp = 1; } my $pipe = IO::Pipe->new(); $SIG{CHLD} = 'IGNORE'; defined(my $pid = fork) or $self->throw("Couldn't fork: $!"); unless($pid) { #CHILD $pipe->writer(); #if we're running under mod_perl, clean up some things after this fork if ($ENV{MOD_PERL} and my $r = eval{Apache->request} ) { $r->cleanup_for_exec; #don't read or write the mod_perl parent's tied filehandles close STDIN; close STDOUT; setsid() or $self->throw('Could not detach from parent'); } } else { #PARENT $pipe->reader(); } return ( $pid, $pipe ); } ---------------------------------------------------------------- In mod_perl 2, cleanup_for_exec is no longer required: http://perl.apache.org/docs/2.0/user/porting/compat.html#C__r_E_gt_cleanup_for_exec_ So, you could probably just do this (warning : untested) : ---------------------------------------------------------------- my $MP1 = $ENV{MOD_PERL} && ! (exists $ENV{MOD_PERL_API_VERSION} and $ENV{MOD_PERL_API_VERSION} >= 2); sub _open_pipe { my ($self) = @_; if($MP1! our $loaded_apache_sp) { eval 'use Apache::SubProcess'; $@ and $self->throw("[EMAIL PROTECTED]::SubProcess module required for running under mod_perl"); $loaded_apache_sp = 1; } my $pipe = IO::Pipe->new(); $SIG{CHLD} = 'IGNORE'; defined(my $pid = fork) or $self->throw("Couldn't fork: $!"); unless($pid) { #CHILD $pipe->writer(); #if we're running under mod_perl, clean up some things after this fork if ($MP1 and my $r = eval{Apache->request} ) { $r->cleanup_for_exec; #don't read or write the mod_perl parent's tied filehandles close STDIN; close STDOUT; setsid() or $self->throw('Could not detach from parent'); } } else { #PARENT $pipe->reader(); } return ( $pid, $pipe ); }