perl-modperl mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Bruce Johnson <john...@Pharmacy.Arizona.EDU>
Subject Re: Problem with mod_perl and DBI/DBD::Oracle LD_LIBRARY_PATH is not being recognized?
Date Mon, 21 Oct 2013 20:25:42 GMT

On Oct 21, 2013, at 1:11 PM, Charlie Smith <SmithCW@ldschurch.org> wrote:

> Try setting perl env inside apache config.
> 
> Example:
> 
> SetEnv PERL5LIB "/usr/lib/5.10.0: /usr/lib/additionalPerlInstallArea"
> 
> 
> You also should have 
> 
> LoadModule perl_module modules/mod_perl.so

It's there in perl.conf which is being run.

> 
> 
> grep for mod_perl in the Apache error_log file?  you'll see line indicating that mod_perl
resuming normal operations.

It's there:

Mon Oct 21 13:21:21 2013] [notice] Apache/2.2.15 (Unix) DAV/2 PHP/5.3.3 mod_ssl/2.2.15 OpenSSL/1.0.0-fips
mod_perl/2.0.4 Perl/v5.10.1 configured -- resuming normal operations

also the mod_perl version and API are in %ENV:

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

> 
> Try also
> PerlResponseHandler ModPerl::RegistryPrefork

I get the same error.

> 
> Could also try putting in a ScriptAlias directive in httpd.conf for where you perl scripts
are.

If I do that, I get the error:

[root@merthiolate catcard]# service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd: [Mon Oct 21 10:43:21 2013] [warn] The ScriptAlias directive in /etc/httpd/conf/httpd.conf
at line 593 will probably never match because it overlaps an earlier Alias.
                                                           [  OK  ]

> 
> Make sure your perl dir is correct.  There may be some aliases etc. needed from /usr/lib/localperl
to /usr/lib/perl for example.

Perl is working just fine, if I don't use DBI in the script no errors happen.

> 
> 64 bit perl?
> 

Yes, 64-bit everything.

The script works if I comment out the mod_perl handler, uncomment the ScriptAlias line and
restart Apache, so it HAS to be with the mod_perl handler directives.


> 
> -----Original Message-----
> From: Bruce Johnson [mailto:johnson@Pharmacy.Arizona.EDU] 
> Sent: Monday, October 21, 2013 1:46 PM
> To: Fred Moyer
> Cc: mod_perl list
> Subject: Re: Problem with mod_perl and DBI/DBD::Oracle LD_LIBRARY_PATH is not being recognized?
> 
> 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 <fred@redhotpenguin.com> wrote:
> 
>> Where does Oracle.so live on your filesystem?
>> 
>> 
>> On Mon, Oct 21, 2013 at 11:37 AM, Bruce Johnson <johnson@pharmacy.arizona.edu>
wrote:
>> 
>> On Oct 21, 2013, at 11:20 AM, Fred Moyer <fred@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 <johnson@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
> 
> 
> 
> NOTICE: This email message is for the sole use of the intended recipient(s) and may contain
confidential and privileged information. Any unauthorized review, use, disclosure or distribution
is prohibited. If you are not the intended recipient, please contact the sender by reply email
and destroy all copies of the original message.
> 

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

Institutions do not have opinions, merely customs



Mime
View raw message