Right where it's supposed to:

/usr/local/lib64/perl5/auto/DBD/Oracle/Oracle.so

Again, if this was missing or the build was broken, it wouldn't work on the 
command line or as a CGI script, either.

This is what's making me go mad…I can't find anything wrong.


%ENV is right
%INC is right

httpd.conf and perl.conf are right, as far as I can tell


I've found one reference to this online that isn't very encouraging:

<http://stackoverflow.com/questions/17050541/unable-to-use-dbdoracle-from-apache-mod-perl>

"Never got to the bottom of this problem. Built different version of Apache and 
ModPerl and tried various combinations of Oracle client until the problem went 
away. Working combination: Apache/2.2.24 (Unix) mod_perl/2.0.7 Perl/v5.10.1"

Our sysadmin would rather we kept to the CentOS repos for all this to make life 
easier for managing updates (this is a vm)

On Oct 21, 2013, at 11:42 AM, Fred Moyer <f...@redhotpenguin.com> wrote:

> Where does Oracle.so live on your filesystem?
> 
> 
> On Mon, Oct 21, 2013 at 11:37 AM, Bruce Johnson 
> <john...@pharmacy.arizona.edu> wrote:
> 
> On Oct 21, 2013, at 11:20 AM, Fred Moyer <f...@redhotpenguin.com> wrote:
> 
> > This is annoying but it happens on 64 bit architectures.
> >
> > > The path is correct, the script works fine on the command line, and if I 
> > > comment out the handler directives in the perl.conf script, put in a 
> > > ScriptAlias and process the script as a normal CGI script, it also works.
> >
> > Sounds like some environment variable is not getting passed correctly to 
> > mod_perl. Maybe dump out %ENV from the command line and see if there are 
> > additional vars you need to pass?
> 
> Nope, good idea but the vars I need are present, even with the modperl 
> handler in place. The only ones you need for DBD::Oracle to work are 
> ORACLE_HOME and LD_LIBRARY_PATH
> 
> DBD::Oracle was properly compiled, else it wouldn't work on the command line, 
> either.
> 
> >
> > I'd dump out %INC from the command line and mod_perl also to make sure that 
> > you are loading the needed modules. You could try to install DBD::Oracle in 
> > /usr/lib instead of /usr/local/lib also - my guess is that it's looking for 
> > the Oracle.so in /usr/local/lib but it is located somewhere else.
> 
> With mod_perl there is just one more, /etc/httpd
> 
> command line:
> 
> INC-> /usr/local/lib64/perl5
> INC-> /usr/local/share/perl5
> INC-> /usr/lib64/perl5/vendor_perl
> INC-> /usr/share/perl5/vendor_perl
> INC-> /usr/lib64/perl5
> INC-> /usr/share/perl5
> INC-> .
> 
> server:
> 
> INC-> /usr/local/lib64/perl5
> INC-> /usr/local/share/perl5
> INC-> /usr/lib64/perl5/vendor_perl
> INC-> /usr/share/perl5/vendor_perl
> INC-> /usr/lib64/perl5
> INC-> /usr/share/perl5
> INC-> .
> INC-> /etc/httpd
> 
> 
> >
> >
> > On Mon, Oct 21, 2013 at 10:57 AM, Bruce Johnson 
> > <john...@pharmacy.arizona.edu> wrote:
> > We've set a Directory directive for some perl scripts, setting a mod_perl 
> > handler:
> >
> > Alias /card_access /home/allwebfiles/perl/catcard
> >
> >  <Directory /home/allwebfiles/perl/catcard>
> >      SetHandler perl-script
> >      PerlResponseHandler ModPerl::Registry
> >      PerlOptions +ParseHeaders
> >      Options +ExecCGI
> >      PerlSetEnv LD_LIBRARY_PATH /usr/lib/oracle/11.2/client64/lib
> >      PerlSetEnv ORACLE_HOME /usr/lib/oracle/11.2/client64
> >  </Directory>
> >
> > The %ENV variable is there, if I print the %ENV values:
> >
> > LD_LIBRARY_PATH --> /usr/lib/oracle/11.2/client64/lib
> > MOD_PERL --> mod_perl/2.0.4
> > MOD_PERL_API_VERSION --> 2
> > ORACLE_HOME --> /usr/lib/oracle/11.2/client64
> > PATH --> /sbin:/usr/sbin:/bin:/usr/bin
> >
> > But trying to initialize a DBI database connection results in the following 
> > error:
> >
> > [Mon Oct 21 10:10:37 2013] [error] install_driver(Oracle) failed: Can't 
> > load '/usr/local/lib64/perl5/auto/DBD/Oracle/Oracle.so' for module 
> > DBD::Oracle: libocci.so.11.1: cannot open shared object file: No such file 
> > or directory at /usr/lib64/perl5/DynaLoader.pm line 200.\n at (eval 11) 
> > line 3\nCompilation failed in require at (eval 11) line 3.\nPerhaps a 
> > required shared library or dll isn't installed where expected\n at 
> > /home/allwebfiles/perl/catcard/oratest.pl line 9\n
> >
> > Which is precisely the error you get when LD_LIBRARY_PATH is unset or 
> > incorrect.
> >
> > libocci.so.11.1 is where it's supposed to be.
> >
> > [root@merthiolate catcard]# ls -l /usr/lib/oracle/11.2/client64/lib
> > total 185016
> > -rw-r--r-- 1 root root       368 Sep 17  2011 glogin.sql
> > lrwxrwxrwx 1 root root        17 May 20 12:07 libclntsh.so -> 
> > libclntsh.so.11.1
> > -rw-r--r-- 1 root root  52761218 Sep 17  2011 libclntsh.so.11.1
> > -rw-r--r-- 1 root root   7955322 Sep 17  2011 libnnz11.so
> > lrwxrwxrwx 1 root root        15 May 20 12:07 libocci.so -> libocci.so.11.1
> > -rw-r--r-- 1 root root   1971762 Sep 17  2011 libocci.so.11.1
> > -rw-r--r-- 1 root root 118408281 Sep 17  2011 libociei.so
> > -rw-r--r-- 1 root root    164836 Sep 17  2011 libocijdbc11.so
> > -rw-r--r-- 1 root root   1503303 Sep 17  2011 libsqlplusic.so
> > -rw-r--r-- 1 root root   1477446 Sep 17  2011 libsqlplus.so
> > -rw-r--r-- 1 root root   2095661 Sep 17  2011 ojdbc5.jar
> > -rw-r--r-- 1 root root   2714016 Sep 17  2011 ojdbc6.jar
> > -rw-r--r-- 1 root root    300666 Sep 17  2011 ottclasses.zip
> > -rw-r--r-- 1 root root     66779 Sep 17  2011 xstreams.jar
> >
> > The path is correct, the script works fine on the command line, and if I 
> > comment out the handler directives in the perl.conf script, put in a 
> > ScriptAlias and process the script as a normal CGI script, it also works.
> >
> > I'm confident the issue doesn't have anything to do with DBI or DBD::Oracle.
> >
> > It ONLY fails when the script is executed as a mod_perl handler.
> >
> > The script itself is very simple; all I do is create a database handle and 
> > if no error is thrown, print 'It works'.
> >
> > #!/usr/bin/perl
> > use DBI;
> > use strict;
> >
> > my $login="xxxxxx";
> > my $dbpass='xxxxxxxx';
> > my $dbname="host=xxx.xxx.xxx.xx;sid=xxx";
> > my $dbh = DBI->connect("dbi:Oracle:$dbname", $login, $dbpass, {RaiseError 
> > =>1});
> >
> > print "Content-type: text/html\n\n";
> > print "It Works";
> > exit;
> >
> > (and this is just a test , any script using DBI fails with this error.)
> >
> > What am I missing?
> >
> > --
> > Bruce Johnson
> > University of Arizona
> > College of Pharmacy
> > Information Technology Group
> >
> > Institutions do not have opinions, merely customs
> >
> >
> >
> 
> --
> Bruce Johnson
> University of Arizona
> College of Pharmacy
> Information Technology Group
> 
> Institutions do not have opinions, merely customs
> 
> 
> 

-- 
Bruce Johnson
University of Arizona
College of Pharmacy
Information Technology Group

Institutions do not have opinions, merely customs


Reply via email to