|
Установка Apache+Perl+Oracle Oracle LINUX 7.6
|
|||
---|---|---|---|
#18+
Добрый день! Может, сможете мне помочь? Ситуация такая: Oracle enterprise linux 7.6, Oracle 12.1. В системе линукс 2 юзера: root и oracle. Нужно настроить выгрузку отчета в браузере: клиент входит на страничку http://IP-сервера/, вводит период времени и жмет показать результат. В это время запускается perl — скрипт, коннектится к БД Oracle и выгружает данные. МОЯ ПРОБЛЕМА: пишу простейший скрипт perl: #!/usr/bin/perl print «Content-type: text/html\n\n»; print «Hello, World.»; Далее запускаю его так: cd /var/www/cgi-bin/ perl test.pl и получаю результат. Далее набираю в браузере http://192.168.56.107/cgi-bin/test.pl И в браузере тоже получаю результат. Пишу второй скрипт: #!/usr/bin/perl -W use DBI; # $ENV{ORACLE_HOME}=»/home/orcl/app/oracle/product/11.2.0.4″; # $ENV{NLS_LANG}=»AMERICAN_CIS.CL8MSWIN1251″; my $db=»192.168.56.107″; my $dbsid=»test»; my $dbuser=»system»; my $dbpass=»123456″; $db = DBI->connect(«dbi:Oracle:host=$db;sid=$dbsid», $dbuser, $dbpass); $sql0=$db->prepare(qq{ select * from m }); $sql0->execute(); while(@row=$sql0->fetchrow_array){ print $row[0].»\n»; } Далее запускаю его так: cd /var/www/cgi-bin/ perl test.pl и получаю результат. Но как только пытаюсь его в браузере запустить http://10.16.29.105/cgi-bin/test2.pl , то в браузере чистая страница, и ошибка в логах апача: install_driver(Oracle) failed: Can’t locate DBD/Oracle.pm in @INC (@INC contains: /home/oracle/perl5/lib/perl5/x86_64-linux-thread-multi/DBD/ /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at (eval 3) line 3. __________________________________________________ Что я делал: (под root)установка apache: yum install -y httpd (под root)добавляем в автозагрузку systemctl enable httpd (под root)запускаем: systemctl start httpd (под root)проверяем netstat -tulnp | grep httpd (под root)(если в браузере не заходит на сайт) iptables -F (под root) yum install -y cpan (под oracle) cpan дать полные права на папку /usr cpan> install CGI cpan> install DBI cpan> install YAML cpan> install DBD::Oracle Причем, после установки каждого модуля в cpan везде было make Makefile.pl — OK только были предупреждения при установке install DBD::Oracle Unable to connect to database. Я даже пробовал во второй скрипт добавить use lib = /…..(путь к Oracle.pm) и все равно эта же ошибка. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2019, 12:36 |
|
Установка Apache+Perl+Oracle Oracle LINUX 7.6
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2019, 13:35 |
|
Установка Apache+Perl+Oracle Oracle LINUX 7.6
|
|||
---|---|---|---|
#18+
Can’t locate DBD/Oracle.pm in @INC IMHO,как-то вы кривовато пакет Оракловый проинсталлировали. Попробуйте явным образом прописать в скрипте путь, где он проинсталлирован - думаю поможет.. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2019, 15:43 |
|
Установка Apache+Perl+Oracle Oracle LINUX 7.6
|
|||
---|---|---|---|
#18+
bdmalex, добрый день!!!! Вот и у меня эти же проблемы. Сегодня весь день игрался с путями. Чуйка мне подсказывает, что надо правильно в bash_profile заполнить 2 параметра: LD_LIBRARY_PATH и PERL5LIB Как только начинаю что-то менять и для ORACLE_HOME, то получаю при выполнении sqlplus "not found". DBD Причем все сделал как в статье: проблема как и у автора, далее она пропадала, но итог такой: или проблема с Oracle.pm или Oracle.so (((( Ну и в командной строке скрипт без проблем подключается к БД и выводит результат. Если бы кто скинул свои настройки путей. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2019, 17:02 |
|
Установка Apache+Perl+Oracle Oracle LINUX 7.6
|
|||
---|---|---|---|
#18+
Добрый день! Помоему, я нашел в чем проблема: сервис апач стартует не под моим юзером(orcl) из-под которого юзается oracle, а под root. потому что если пишу под orcl: cd /var/www/cgi-bin perl test.pl то все ОК, коннектится к бд и выводит содержимое таблицы БД. А если пишу под root: cd /var/www/cgi-bin perl test.pl то вываливает сразу ту же ошибку, что и в логе апача: can't load oracle.so .....11.1 Не знаю как под orcl запустить апач, в httpd.conf есть настройка под кем запускать, прописал там orcl юзер и группа вместо apache и не помогло. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2019, 09:11 |
|
Установка Apache+Perl+Oracle Oracle LINUX 7.6
|
|||
---|---|---|---|
#18+
снес cpan и все модули. Добавил в .bash_profile рута oracle_home и ld_library_path такие же как и у юзера oracle. Далее установил и под рутом и под oracle все модули cpan. В итоге perl test.pl отрабатывает ОК и под рутом и под oracle. Но в браузере все равно 500 ошибка и Oracle.so бла-бла-бла ((((( ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2019, 10:40 |
|
Установка Apache+Perl+Oracle Oracle LINUX 7.6
|
|||
---|---|---|---|
#18+
пробовал менять первую строчку самого скрипта #!/usr/bin/perl на другие всевозможные варианты. Почти всегда в командной строке скрипт выполняется, а вот в логе апача одно из трех: (2) no such file or directory (13) permission denied (8)exec format error. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 16:18 |
|
Установка Apache+Perl+Oracle Oracle LINUX 7.6
|
|||
---|---|---|---|
#18+
Происходящее не поддается ни какой логике! 1)если бы были какие проблемы с DBD или другими модулями Perl, то скрипт бы не отрабатывал и не выводил результаты из БД в командной строке. 2)если бы были проблемы с Apache, то не отрабатывал бы в браузере простейший perl скрипт "Hello world" 3) теория нехватки прав тоже отпала: сейчас скрипт отрабатывает в командной строке как под обычным юзером oracle, так и под root ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 16:24 |
|
Установка Apache+Perl+Oracle Oracle LINUX 7.6
|
|||
---|---|---|---|
#18+
Сейчас попробовать копировать файлик libclntsh.so.12.1 из $ORACLE_HOME/lib в папки /usr и им подобные. И счас уже ругается на другой файл из $ORACLE_HOME/lib libipc1.so для Oracle.so. Такое чувство, что все файлы из $ORACLE_HOME/lib ищет в /usr/.... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2019, 12:32 |
|
Установка Apache+Perl+Oracle Oracle LINUX 7.6
|
|||
---|---|---|---|
#18+
Я конечно дико извиняюсь, но если смотреть оба скрипта, так как вы написали...то понятно почему второй скрипт у вас не пашет в браузере Где, строка для браузера во втором скрипте: print «Content-type: text/html\n\n»; ? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2019, 20:32 |
|
Установка Apache+Perl+Oracle Oracle LINUX 7.6
|
|||
---|---|---|---|
#18+
Добрый день! Добавил строку с Content-type, ничего не изменилось. Я вчера проштудировал 22 главу книги "Secret ORACLE" Norbert Debes. Там написано, что надо правильно настроить perl5lib, path, ld_library_path. Потратил полдня на перебор всевозможных комбинаций этих переменных. Снес модули и cpan.Только начинаю что-то менять и не ставятся через CPAN модули и все крашится. Короче, у меня в командной строке работает только с такими параметрами: export PATH=$ORACLE_HOME/perl:$PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib perl5lib вообще не установлен. Короче, проблема остается: Oracle.so из usr/local/lib64/perl5/auto/DBD/Oracle/Oracle.so не видит файлики *.so из $ORACLE_HOME/lib. Я вчера libclntsh.so.12.1 покопировал почти во все папки, уже на него не ругается. А ругается на следующий libipc1.so..... Скрипт: #!/usr/bin/perl # RCS: $Header: /var/www/cgi-bin/test.pl v1.0 # Perl DBI/DBD::Oracle Example use strict; use DBI; print "Content-type: text/html\n\n"; $ENV{NLS_LANG}="AMERICAN_CIS.CL8MSWIN1251"; my $db="192.168.56.107"; my $dbsid="test"; my $dbuser="system"; my $dbpass="123456"; my $sql0; my @row; $db = DBI->connect("dbi:Oracle:host=$db;sid=$dbsid", $dbuser, $dbpass); $sql0=$db->prepare(qq{ select * from m }); $sql0->execute(); while(@row=$sql0->fetchrow_array){ print $row[0]."\n"; } ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2019, 10:50 |
|
Установка Apache+Perl+Oracle Oracle LINUX 7.6
|
|||
---|---|---|---|
#18+
Добрый день! Значит, у меня так: ORACLE_HOME=/u01/app/oracle/product/12.1.dbhome_1 Устранил ошибку "Can't load Oracle.so for libclntsh.so.12.1/libipc1.so/libnnz12.so/..." Все вот эти файлики libclntsh.so.12.1/libipc1.so/libnnz12.so лежат в ORACLE_HOME=/u01/app/oracle/product/12.1.dbhome_1/lib И их подкинул в папку /usr/lib64. Сам этот Oracle.so одинаковых версий есть в /usr/local/.. и ORACLE_HOME, но берется именно из /usr/local/. Но сейчас у меня другая ошибка: ERROR OCIEnvNlsCreate. Check ORACLE_HOME (Linux) env var or path (windows) and or NLS settings, permissions. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.06.2019, 08:46 |
|
Установка Apache+Perl+Oracle Oracle LINUX 7.6
|
|||
---|---|---|---|
#18+
Короче, я только счас обратил внимание, что для DBD::Oracle устанавливают Oracle client. А у меня установлен только Oracle server. По идее вот в чем причина всех бед. Установлю клиент и попробую. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2019, 11:06 |
|
Установка Apache+Perl+Oracle Oracle LINUX 7.6
|
|||
---|---|---|---|
#18+
Нашел тему, что предустановленный в системе(/usr/bin/perl) перл лучше не использовать. Я скачал и установил в отдельную папку другую версию с помощью опции PREFIX=/u01/app/perl Пишу which perl и показывает /usr/bin/perl (версия 5.16.3) Пишу /u01/app/perl/bin/perl -v и показывает мою версию 5.20 Далее стартую простейший перл скрипт: #!/u01/app/perl/bin/perl -w print "Content-type: text/html\n\n"; print "Perl работает!"; И в cmd он отрабатывает (в cmd вообще все равно на первую строку, только для апача это важно). А в браузере не работает, permission denied. Возникло 2 вопроса: Как заставить работать мой установленный перл, а не системный. И как заставить его искать *.so файлики не в /usr/lib64, где их нету, а в ORACLE_HOME/lib? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2019, 15:08 |
|
Установка Apache+Perl+Oracle Oracle LINUX 7.6
|
|||
---|---|---|---|
#18+
пишу по памяти, лет 12 назад это было. да, апач запускается от юзера apache. там где-то в конфиг файлах надо прописывать оракловые пути. либо как-то так: Код: python 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
вот еще нашлось про конфиг файл апача: When I see this problem, I automatically think, Oh, the Oracle libs aren't being located by the system. Edit /etc/ld.so.conf and add the value of $ORACLE_home/lib (the directory that has libclntsh.so.8 in it) eg /usr/local/oracle/8.1.5/lib Then run /sbin/ldconfig to update Linux's idea of where things are, and stop and start the server. ALSO, ensure that ORACLE_HOME and preferably ORACLE_SID are explicitly provided to your perl stuff: in httpd.conf PerlPassEnv ORACLE_HOME THIS CAN BITE YOU! If your httpd startup script doesn't have the oracle environment loaded, you may have to fix that as well: at the top of /etc/rc.d/init.d/httpd # Source function library. . /etc/rc.d/init.d/functions <!-- already there --> # Source Oracle environment <!-- you add these lines --> ORAENV_ASK=NO ORACLE_SID=stats . /usr/bin/oraenv вот с этими вариантами и работайте. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2019, 00:25 |
|
Установка Apache+Perl+Oracle Oracle LINUX 7.6
|
|||
---|---|---|---|
#18+
https://stackoverflow.com/questions/6569080/how-to-define-a-variable-in-apaches-httpd-conf-file/15731921#15731921 How to define a variable in apache's httpd.conf file? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2019, 00:35 |
|
Установка Apache+Perl+Oracle Oracle LINUX 7.6
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2019, 00:40 |
|
Установка Apache+Perl+Oracle Oracle LINUX 7.6
|
|||
---|---|---|---|
#18+
Добрый день! Я немного изменил Ваш скрипт: убрал полностью блок begin. Короче, в командной строке печатает все переменные, а через браузер только те, которые прописаны в httpd.conf. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2019, 14:34 |
|
Установка Apache+Perl+Oracle Oracle LINUX 7.6
|
|||
---|---|---|---|
#18+
вероятно, вы не поняли. блок begin как раз помогает. он как бы подставляет системные переменные без которых не работает ваш скрипт, не находя Oracle. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2019, 22:49 |
|
Установка Apache+Perl+Oracle Oracle LINUX 7.6
|
|||
---|---|---|---|
#18+
а потом уже спокойно используете DBI, ошибок быть не должно. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2019, 22:52 |
|
Установка Apache+Perl+Oracle Oracle LINUX 7.6
|
|||
---|---|---|---|
#18+
добрый всем день! Я победил проблему сам, методом тыка. Жду ваших комментов. Напомню, в системе 2 юзера root и обычный orcl, под которым ставился и работает sql. Вот что я сделал: 1) скачал instantclient (у меня 12.1 версия database): instantclient-basic-linux.x64-12.1.0.2.0.zip instantclient-sdk-linux.x64-12.1.0.2.0.zip instantclient-sqlplus-linux.x64-12.1.0.2.0.zip Распаковал все в одну папку instantclient_12_1 2) Скопировать содержимое папки instantclient_12_1(не саму папку) в /usr/lib64 Дать права 0777 на папку usr (иначе не установятся модули cpan под юзером orcl) Положить тестовый скрипт в /var/www/cgi-bin/ Дать права 0777 на папку www и подпапки с файлами Проверить доступность sqlplus под юзером, под которым будете ставить модули. 3) (под root) yum install -y cpan 4) запуск cpan (под orcl) cpan 3 раза enter (для автонастройки) и на добавление путей PERL5LIB: "add to .bash file?" набрать No 5) установка модулей cpan> install CGI cpan> install DBI cpan> install YAML cpan> install DBD::Oracle 6) тест проверка в командной строке: perl /var/www/cgi-bin/test.pl Проверка в браузере http://192.168.56.112/cgi-bin/test.pl Шапка скрипта такая: #!/usr/bin/perl -w #use strict; use DBI; use DBD::Oracle; use CGI qw(:standard); print("Content-type: text/html\n\n"); my $db="192.168.56.112"; my $dbsid="test"; my $dbuser="system"; my $dbpass="123456"; $db = DBI->connect("dbi:Oracle:host=$db;sid=$dbsid", $dbuser, $dbpass); И все работает!!!!!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2019, 11:44 |
|
Установка Apache+Perl+Oracle Oracle LINUX 7.6
|
|||
---|---|---|---|
#18+
Я читал, что не рекомендуется использовать предустановленный в систему перл, а ставить свой в другое место. Также не рекомендуется использовать библиотеки oracle из dbhome_1, т к если админ обновит oracle, все это перестанет работать. Т е надо юзать instantclient, указав к нему путь. Но у меня все это в упор не работает: что бы я ни делал, всегда берется Oracle.so именно дефолтный, а не мой и ни в какую не находит оракловые библиотеки мои. *очень важный момент: положить instantclient файлы до начала установки модулей, т к они связываются в процессе установки и потом подкинуть их "не покатит". ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2019, 11:49 |
|
|
start [/forum/topic.php?fid=23&msg=39826402&tid=1459898]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
27ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
others: | 259ms |
total: | 382ms |
0 / 0 |