[Bioperl-l] I can't access clustalw from my cgi perl program...

Mauricio Herrera Cuadra arareko at campus.iztacala.unam.mx
Wed May 21 20:01:42 UTC 2008


Hi Nisa,

CGI scripts are generally run by a different user than you, and which 
user (e.g. apache, nobody) will depend on the platform you're running 
the script on, thus the environment variables you currently have for 
your login shell are not being inherited to the web interface. The best 
workaround for this is to add a 'use lib' pragma at the top of your CGI 
script:

use lib '/path/to/your/bioperl/installation/';

Also, it's a good practice to use taint mode for CGI scripts:

#!/usr/bin/perl -wT

Hope this helps.

Regards,
Mauricio.

vdar at yorku.ca wrote:
> Hi,
> 
> This is my .bashrc file and perl can see bioperl because my commandline programs
> work fine, the problem is with web-based programs
> 
> ##############################################
> # .bashrc
> 
> # User specific aliases and functions
> 
> # Source global definitions
> if [ -f /etc/bashrc ]; then
>         . /etc/bashrc
> 
> fi
> export PERL5LIB="/opt/rocks/lib/perl5/site_perl/5.8.8"
> 
> 
> ################################################
> 
> Please let me know if I need to change it now...
> 
> Thanks
> Nisa
> 
> 
> Quoting Thomas Sharpton <sharpton at berkeley.edu>:
> 
>> Hi Nisa,
>>
>> Looks to me like you need to add BioPerl to your PERL5LIB environmental
>> variable.  Until you set this up, Perl doesn't know where on your
>> machine to find the Bioperl code.  On a UNIX/Linux/Mac OSX based system,
>> the fix is as follows:
>>
>>  From http://www.bioperl.org/wiki/Using_Subversion :
>>
>> Tell perl where to find BioPerl (assuming you checked out the code in
>> $HOME/src; set this in your .bash_profile, .profile, or .cshrc):
>>
>> bash: $ export PERL5LIB="$HOME/src/bioperl-live:$PERL5LIB"
>> tcsh: $ setenv PERL5LIB "$HOME/src/bioperl-live:$PERL5LIB"
>>
>> On a windows machine, you can either environmental variables through
>> autoexec.bat or via the Control Panel.
>>
>> Feel free to back channel me if you need help.
>>
>> Cheers,
>> Tom
>>
>>
>> nisa_dar wrote:
>>> Hi,
>>>
>>> My multiple alignment program works fine from command line but when i put
>>> the
>>> same piece of code in my cgi perl program, it gives me the same error,
>> which
>>> is,
>>>
>>> Can't locate Bio/Tools/Run/Alignment/Clustalw.pm in @INC (@INC contains:
>>> /export/share/iNquiry/perl/lib/5.8.5/x86_64-linux-thread-multi
>>> /export/share/iNquiry/perl/lib/5.8.5
>>> /export/share/iNquiry/perl/lib/x86_64-linux-thread-multi
>>> /export/share/iNquiry/perl/lib/5.8.4 /export/share/iNquiry/perl/lib/5.8.3
>>> /export/share/iNquiry/perl/lib/5.8.2 /export/share/iNquiry/perl/lib/5.8.1
>>> /export/share/iNquiry/perl/lib/5.8.0 /export/share/iNquiry/perl/lib
>>> /usr/lib64/perl5/5.8.5/x86_64-linux-thread-multi /usr/lib/perl5/5.8.5
>>> /usr/lib64/perl5/site_perl/5.8.5/x86_64-linux-thread-multi
>>> /usr/lib64/perl5/site_perl/5.8.4/x86_64-linux-thread-multi
>>> /usr/lib64/perl5/site_perl/5.8.3/x86_64-linux-thread-multi
>>> /usr/lib64/perl5/site_perl/5.8.2/x86_64-linux-thread-multi
>>> /usr/lib64/perl5/site_perl/5.8.1/x86_64-linux-thread-multi
>>> /usr/lib64/perl5/site_perl/5.8.0/x86_64-linux-thread-multi
>>> /usr/lib/perl5/site_perl/5.8.5 /usr/lib/perl5/site_perl/5.8.4
>>> /usr/lib/perl5/site_perl/5.8.3 /usr/lib/perl5/site_perl/5.8.2
>>> /usr/lib/perl5/site_perl/5.8.1 /usr/lib/perl5/site_perl/5.8.0
>>> /usr/lib/perl5/site_perl
>>> /usr/lib64/perl5/vendor_perl/5.8.5/x86_64-linux-thread-multi
>>> /usr/lib64/perl5/vendor_perl/5.8.4/x86_64-linux-thread-multi
>>> /usr/lib64/perl5/vendor_perl/5.8.3/x86_64-linux-thread-multi
>>> /usr/lib64/perl5/vendor_perl/5.8.2/x86_64-linux-thread-multi
>>> /usr/lib64/perl5/vendor_perl/5.8.1/x86_64-linux-thread-multi
>>> /usr/lib64/perl5/vendor_perl/5.8.0/x86_64-linux-thread-multi
>>> /usr/lib/perl5/vendor_perl/5.8.5 /usr/lib/perl5/vendor_perl/5.8.4
>>> /usr/lib/perl5/vendor_perl/5.8.3 /usr/lib/perl5/vendor_perl/5.8.2
>>> /usr/lib/perl5/vendor_perl/5.8.1 /usr/lib/perl5/vendor_perl/5.8.0
>>> /usr/lib/perl5/vendor_perl .) at
>>> /export/share/iNquiry/www/cgi-bin/bipod/nisa/snpfinder.cgi line 14.
>>> BEGIN failed--compilation aborted at
>>> /export/share/iNquiry/www/cgi-bin/bipod/nisa/snpfinder.cgi line 14.
>>>
>>>
>>>
>>> Here is my cgi perl program
>>>
>>> #!/usr/bin/perl -w
>>>
>>> use strict;
>>> use CGI qw(:standard);
>>> use CGI::Carp qw/fatalsToBrowser/;
>>> use Bio::SeqIO;
>>> use Bio::Align::AlignI;
>>> use Bio::AlignIO;
>>> use Bio::AlignIO::msf;
>>> use Bio::SimpleAlign;
>>> use Bio::PrimarySeq;
>>> use Bio::Tools::Run::Alignment::Clustalw;
>>> use Bio::PrimarySeqI;
>>> use Bio::Root::IO;
>>> use Bio::Seq;
>>> use Bio::TreeIO;
>>> use Bio::Root::Root Bio::Tools::Run::WrapperBase;
>>> use Bio::LocatableSeq;
>>>
>>>
>>> BEGIN {
>>> 	$ENV{CLUSTALDIR} = '/opt/Bio/bin/clustalw';
>>> }
>>> print"Content-type: text/html\n\n";
>>>
>>>
>>> if (param()){ #condition if user supplied some data
>>> 	my $new_seq=param("sequence"); #to store sequence from text box of form
>>> 	my $selection=param("size");#to store drop down menu selection for
>>> translation type
>>> 	my $file1=param("uploadfile");#variable for name of the file
>>> 	my $address=param("email");#variable to hold e.mail address
>>>
>>> 	if ($file1=~/.+/) {#test condition, if user supplied a file
>>>
>>> 		my $R_FH = upload("uploadfile");#get file handle
>>>
>>>
>>>
>>>
>>> 		my  $in  = Bio::AlignIO->new(-file   => $file1 ,
>>> 					-format => 'fasta');
>>> 		my $out = Bio::AlignIO->new(-file   => ">out.aln.pfam" ,
>>> 					-format => 'pfam');
>>>
>>> 		while ( my $aln1 = $in->next_aln() ) {
>>> 			$out->write_aln($aln1);
>>> 		}
>>>
>>> 		close $R_FH;
>>> 		open FH, "out.aln.pfam" || die "Alignment file doesn't exist\n";
>>> 		while(<FH>){
>>>
>>> 		print $_,"\n";
>>> 		}
>>> 		close FH;
>>>
>>> 		#To send results through e.mail
>>> 			$report=~s/<br \/>/\n/g;#change new line character
>>> 			$report=~s/(<.+?>)//g;#remove html tags
>>> 			$report=~s/(&nbsp;)/ /g;#change space character
>>> 			open(MAIL, "|/usr/sbin/sendmail -t") or die"can't compose an e.mail";
>>> 			print MAIL "To:$address\n";
>>> 			print MAIL "From: nisa\n";
>>> 			print MAIL "Subject: results of $file1\n";
>>> 			print MAIL  "\n$report\n";
>>> 			close(MAIL);#close mail
>>>
>>>
>>> 	}else{#error message if no file name is entered
>>> 		print "<html><head><h3>Error: </h3></head><body>You did not enter a file
>>> name,please upload a file<br /></body></html>";
>>>
>>> 	}
>>>
>>> }
>>>
>>> Please let me know what should I do, because clustalw is there and my other
>>> programs (non web-based) are working.
>>>
>>> Thanks
>>> Nisa
>>>
>>
>> --
>> Thomas Sharpton
>> PhD Candidate - UC Berkeley
>> Search smarter: www.siphs.com
>>
>>
> 
> 
> _______________________________________________
> Bioperl-l mailing list
> Bioperl-l at lists.open-bio.org
> http://lists.open-bio.org/mailman/listinfo/bioperl-l
> 

-- 
MAURICIO HERRERA CUADRA
arareko at campus.iztacala.unam.mx
Laboratorio de Genética
Unidad de Morfofisiología y Función
Facultad de Estudios Superiores Iztacala, UNAM



More information about the Bioperl-l mailing list