Hello,

I have editted WebDBSeqI.pm but instead of your code I have put
Apache2::Subprocess where it says Apache::Subprocess. Then I have tried
my script and works ok.

Thank you very much for your help.
Best regards,
Alicia

> On Fri, 2007-04-27 at 11:46 +0200, Alicia Amadoz wrote:
> > Ok, I would try it but where should I write that code? maybe at the
> > startup.perl file?
> > 
> > Thanks,
> > Alicia
> 
> No, you need to find the Bio::DB::WedbDBSeqI module and edit that.
> 
> > 
> > > 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 );
> > > }
> > > 
> > > 
> > > 
> > > 
> > 
> > 



Reply via email to