Env:Невозможно использовать DBD :: Oracle из Apache/mod_perl
Red Hat Enterprise Linux Server release 6.4
Apache/2.2.15 (Unix) mod_perl/2.0.4 Perl/v5.10.1
Perl v5.10.1 (*) built for x86_64-linux-thread-multi
64 bit Oracle client for 11.2
DBD::Oracle : Oracle Driver for DBI ; P/PY/PYTHIAN/DBD-Oracle-1.64.tar.gz : /usr/local/lib64/perl5/DBD/Oracle.pm : Installed: 1.64
/home/oracle/app/oracle/product/11.2.0/client_1/lib/libclntsh.so.11.1: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped
-rwxr-xr-x. 1 oracle oracle 48725761 Jun 10 17:41 /home/oracle/app/oracle/product/11.2.0/client_1/lib/libclntsh.so.11.1
Startup.pl
use lib qw(/home/oracle/app/oracle/product/11.2.0/client_1/lib);
BEGIN {
$ENV{ORACLE_HOME} = '/home/oracle/app/oracle/product/11.2.0/client_1';
$ENV{LD_LIBRARY_PATH} = '/home/oracle/app/oracle/product/11.2.0/client_1/lib';
$ENV{ORACLE_SID} = 'MARS';
}
print STDERR "\nORACLE_HOME = " . $ENV{'ORACLE_HOME'} . "\n";
print STDERR "\nLD_LIBRARY_PATH = " . $ENV{'LD_LIBRARY_PATH'} . "\n";
use mod_perl2;
use Apache::DBI();
use DBI();
use DBD::Oracle;
BEGIN { use Data::Dumper; print STDERR Dumper(\@INC); }
print STDERR "ModPerl2 Startup.pl\n";
foreach (keys %ENV) {
print STDERR "$_\t$ENV{$_}\n";
}
1;
Apache конф
PerlRequire /var/www/cgi-bin/startup.pl
SetEnv ORACLE_HOME "/home/oracle/app/oracle/product/11.2.0/client_1"
SetEnv LD_LIBRARY_PATH "/home/oracle/app/oracle/product/11.2.0/client_1/lib"
Ошибка:
Can't load '/usr/local/lib64/perl5/auto/DBD/Oracle/Oracle.so' for module DBD::Oracle: libclntsh.so.11.1: cannot open shared object file: No such file or directory at /usr/lib64/perl5/DynaLoader.pm line 200.\n at /var/www/cgi-bin/startup.pl line 17\nCompilation failed in require at /var/www/cgi-bin/startup.pl line 17.\nBEGIN failed--compilation aborted at /var/www/cgi-bin/startup.pl line 17.\nCompilation failed in require at (eval 2) line 1.\n
Startup.pl работает при запуске из командной строки, но не загружается через Apache
Вещи уже пытались
- Установка ENV переменных в Apache конф (как показано выше)
- Проверка файла permisison для библиотек oracle
- Печать переменных env из командной строки и сравнение с выходом при запуске из Apache (после удаления DBD :: Oracle)
- Обеспечение безопасности всех Perl, Apache, Oracl е, DBD: Oracle предназначены для 64-битных
- Добавление /home/oracle/app/oracle/product/11.2.0/client_1/lib в /etc/ld.so.conf и работает ldconf
Никогда не разбирался в этой проблеме. Построил разную версию Apache и ModPerl и пробовал различные комбинации клиента Oracle до тех пор, пока проблема не исчезла. Рабочая комбинация: Apache/2.2.24 (Unix) mod_perl/2.0.7 Perl/v5.10.1 – BBS
Ненавижу, когда решение неубедительно. Тем не менее, спасибо за продолжение! – Marcus