| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: разработка для Web > Проблемы со сборкой модуля |
| Автор: ivanpet 14.8.2008, 10:13 |
| Здравствуйте! Сайт размещается на хостере, имеется на нем perl, модулей нужных как обычно нет. Прочитали статью по установке модулей - заинтересовало то, что можно в обход прова установить и использовать свои модули. Для компиляции и сборки нужного модуля написали скрипт следующего содержания (имеется ввиду что модуль уже распокован и закачан на хостинг): #!/usr/bin/perl -t print "Content-type: text/html\n"; print "Pragma: no-cache\n"; print "Expires: now\n\n"; print "Домашняя директория - $HOME"; print "<br>"; print system ('/usr/bin/perl -t Makefile.PL PREFIX=$HOME/mylib'); print system ('make'); print system ('make test'); print system ('make install'); Запускаем скрипт из браузера IE7.0. Происходит следующее: Файл Makefile создается, функция возвращает 0, а вот собрать не можем - функци возращает -1. Может кто-нибудь подскажет в чем проблема и как ее порешать, если это возможно? |
| Автор: Ramirez 14.8.2008, 11:07 |
| Собрать на своей машине (ос думаю нужно такую же как на хосте) и положить на сервер хостеру (и надеятся что пусти в системе у него стандартные, и либы нужные есть). |
| Автор: nitr 14.8.2008, 13:57 | ||
| ivanpet, вы уверены что нужна "компиляция"/сборка? Если нет, то зачем "так извращаться", просто положите ваши модули .pm в ./libs А в скрипте пропишите
Добавлено через 35 секунд ./libs относительно вашего скрипта |
| Автор: ivanpet 14.8.2008, 15:56 |
| Спасибо за советы. 1. Мы в линуксе не очень, но мыслим в таком направлении, если, например, попробовать положить в папку скриптов файл make, а затем запустить скрипт, интересно, файл make запуститься? 2. Собрать этот же самый модуль, например, на виндовой машине, а получившийся модуль положить в нашу папку /mylib. По виндой пробовали собрать, все получилось, и модуль работает под виндовым апачем. Практически все полученные файлы - обычные с расширением *.pm, но вот один файл .packlist содержит пути именно к нашему модулю. Под виндой файл выглядит так c:\inet\localhost... Может собрать на виндовой машине и положить готовый модуль на хостер, с подменой путей скажем /mylib. Интересно сработает, как думаете? P.S. Положили, ради эксперемента один файл smtp_m.pm в директорию /mylib Подключаем так: use lib $root_dir.'/mylib'; use SMTP_M; При запуске скрипта выдается: Can't locate SMTP_M.pm in @INC (@INC contains: /mylib /usr/lib/perl5/5.8.5/i386-linux-thread-multi и т.д. ) Подскажите как правильно БЕЗ сборки указать пути к модулю? |
| Автор: ivanpet 15.8.2008, 07:45 | ||||
Не понятно, Вы извините за назойливость. Где должна располагаться эта папка? При подключении на хостинг через FTP видим следующее: папки: logs (логи апача) site (куда выкладывается сайт) tmp (временные файлы) создаем папку mylib тут же и выкладываем файл SMTP_M - не подключается, выдается то же сообщение об ошибке! Заходим в папку site и создаем там - тоже не работает |
| Автор: nitr 15.8.2008, 08:34 | ||
| предположим папка с нашим скриптом в site создаём папку mylib в папке site кладём в mylib файл SMTP_M.pm и прописываем как уже выше сказал. Есть большая вероятность, что вы это уже проделали, но у вас где-то ошибка, как например с именем файла модуля, возможно модуль самописный и т.д.. Если не получится, ошибку сюда. Добавлено через 1 минуту и 26 секунд
посмотрите внимательно путь не /mylib а именно ./mylib (точку не пропустите) Добавлено через 2 минуты и 43 секунды Где у вас скрипт лежит который 100% работает без этого модуля? |
| Автор: ivanpet 15.8.2008, 11:05 |
| предположим папка с нашим скриптом в site создаём папку mylib в папке site кладём в mylib файл SMTP_M.pm Да именно так и сделано было. (во втором случае) ...и прописываем как уже выше сказал. Есть большая вероятность, что вы это уже проделали... Вот код скрипта, который пытается подключить модуль unshift(@INC,$root_dir); require $root_dir."/config/"."config.pl"; use strict; use CGI qw/:standard :cgi-lib/; use CGI::Carp qw(fatalsToBrowser); use DBI; use lib './mylib'; use SMTP_M; ...возможно модуль самописный... Да нет, на самом деле скачанный со CPAN, могу выложить, если нужно. Модуль - обычный NET::SMTP, только версия поновее. Начали возится потому, что скрипт прова не работает (не может отправлять почту), а этот - работает, по крайней мере на виндовой машине. Если не получится, ошибку сюда. Ошибка та же Can't locate SMTP_M.pm in @INC (@INC contains: /mylib /usr/lib/perl5/5.8.5/i386-linux-thread-multi и т.д. ) Где у вас скрипт лежит который 100% работает без этого модуля? Лежит в папке /site/cgi-bin/usemodul.pl |
| Автор: ivanpet 15.8.2008, 16:44 | ||||
| Модуль подключился, мы только не поняли почему Вместо:
Мы использовали:
Огромное спасибо за поддержку |
| Автор: nitr 15.8.2008, 16:44 | ||||
| Вот вы уже стали говорить дело Копируйте папку Net , которая лежит в архиве http://search.cpan.org/CPAN/authors/id/G/GB/GBARR/libnet-1.22.tar.gz напиши примерно такой скрипт (только под cgi его измените):
Добавлено через 35 секунд Увидите, что используется ваш "новый" модуль. Скажите - зачем вам это?
|
| Автор: ivanpet 15.8.2008, 17:57 | ||||
Да, спасибо. Теперь версия smtp пакета 2.31
Прочитали в какой-то книжке
в этой папке лежат файлы с настройками: доступ к базе, соединение с smtp и т.д. А Вы что посоветуете? |
| Автор: nitr 15.8.2008, 20:30 |
| ivanpet, можно поставить галочку по этой теме, и создать новую тему как кто посоветует |