Your SlideShare is downloading. ×
0
Perl Debugger  and  mod_perl серия «книжко-малышко»
Содержание <ul><li>Вступление </li></ul><ul><li>Немного про  mod_perl </li></ul><ul><li>Проблема  mod_perl </li></ul><ul><...
Вступление <ul><li>Всегда есть упрямые. Спорить ни с кем не собираюсь. Любите отладку на  warn  – ваше личное дело. </li><...
Немного про  mod_perl <ul><li>mod_perl  – это модуль к веб серверу  Apache .  </li></ul><ul><li>Единственное его назначени...
Проблема  mod_perl <ul><li>Единственная, действительно неразрешимая проблема  mod_perl , так это то, что  mod_perl  просто...
Почему течёт память <ul><li>В общем случае, после появления чилда  apache , он уже будет содержать скомпиленный код вашего...
Варианты использования  mod_perl <ul><li>На практике, я встречал 3 вида использования  mod_perl : </li></ul><ul><li>1.  mo...
Варианты использования  mod_perl <ul><li>По пути  /path/developer  у нас может быть скрипт типа  simple_example.pl  с конт...
Варианты использования  mod_perl <ul><li>2.  mod_perl  подвязывается к перл модулю, который обрабатывает $r->uri() и прини...
Варианты использования  mod_perl <ul><li>В каком-то смысле, классический пример контента для  MyPackage::Main </li></ul><u...
Варианты использования  mod_perl <ul><li>3.  mod_perl  реализуется как симбиоз вариантов 1 и 2. </li></ul><ul><li>Сложно с...
Проблема отладки  mod_perl <ul><li>Как уже понятно, речь идёт о подключении  perl debugger  к  perl  коду   в чилде  apach...
Подключение  debugger <ul><li>Для отладки нам потребуется: </li></ul><ul><li>Создать собственные конфиги  apache  (в  home...
Собственные конфиги  apache <ul><li>Рассмотрим следующий вариант работы  apache: </li></ul><ul><li>1 –  определение вашего...
Собственные конфиги  apache <ul><li>Как было сказано вначале, я считаю, что у Вас уже есть рабочее  mod_perl  приложение. ...
Собственные конфиги  apache <ul><li>Откройте для редактирования  ~/httpd.conf  Обратите внимание на параметр  Listen.  Его...
Собственные конфиги  apache <ul><li>Хороший админ не описывает виртхосты в самом  httpd.conf . Для этого, он использует та...
Собственные конфиги  apache <ul><li>Итак, мы сделали описание для  apache , но ещё никак не затронули описание виртхоста, ...
Собственные конфиги  apache <ul><li>Отредактируем его ( ~/ mysite.conf ) до вида: </li></ul><ul><li><VirtualHost * :3000 >...
Тестовый запуск <ul><li>Все обращения, что до этого вы делали на  http://mysite.ru:80  или  http://mysite.ru:8 1 (зависит ...
Прикручиваем  perl debugger <ul><li>Теперь нам осталось подключить  perl debugger  в каждый чилд  apache.  А поскольку мы ...
Тестовый запуск с  perl debugger <ul><li>Итак, запускаем: </li></ul><ul><li>$ httpd -X -D PERLDB -f ~/httpd.conf </li></ul...
Тестовый запуск с  perl debugger <ul><li>В отличие от стандартной работы с отладчиком, вы можете указать команду «с» и при...
Сложности структуры Вашего проекта <ul><li>Конечно, Ваш проект может быть не так прост. У Вас скорее всего есть  Nginx , к...
Материал и данные по тестированию <ul><li>За основу было взято описание процесса отладки с  http://perl.apache.org/docs/1....
Upcoming SlideShare
Loading in...5
×

Perl Debugger и mod_perl

2,026

Published on

Прикручиваем perl debuuger к mod_perl

Published in: Technology
2 Comments
0 Likes
Statistics
Notes
  • 2) Если выходить из perl debuuger не корректно (over kill signal on perl debugger process), то у вас могут накапливаться симофоры чилдов apache. И, в один прекрасный момент, отладичк просто перестанет запускаться. Поэтому полезно давать периодически команду на удаление этих симофоров:
    ipcs -s | grep you_login | perl -e 'while () { @a=split(/\s+/); print `ipcrm sem $a[1]`}'
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • 1) В описании VirtualHost может использоваться директива: PerlSwitches -I/path_to/lib
    , чтобы подсосать путь к вашим либам. Чтобы отладчик работал корректно, нужно поменять следующим образом:
    use lib ’/path_to/lib’;
    use Apache::DB ();
    ....
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Be the first to like this

No Downloads
Views
Total Views
2,026
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
10
Comments
2
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Perl Debugger и mod_perl"

  1. 1. Perl Debugger and mod_perl серия «книжко-малышко»
  2. 2. Содержание <ul><li>Вступление </li></ul><ul><li>Немного про mod_perl </li></ul><ul><li>Проблема mod_perl </li></ul><ul><li>Почему течёт память </li></ul><ul><li>Варианты использования mod_perl </li></ul><ul><li>Проблема отладки mod_perl </li></ul><ul><li>Подключение debugger </li></ul><ul><li>Собственные конфиги apache </li></ul><ul><li>Тестовый запуск </li></ul><ul><li>Прикручиваем perl debugger </li></ul><ul><li>Тестовый запуск с perl debugger </li></ul><ul><li>Сложности структуры Вашего проекта </li></ul><ul><li>Материал и данные по тестированию </li></ul>
  3. 3. Вступление <ul><li>Всегда есть упрямые. Спорить ни с кем не собираюсь. Любите отладку на warn – ваше личное дело. </li></ul><ul><li>Но, вместе с тем, просто задумайтесь над тем, что логи выполнения perl кода нужны для «истории» работы, а не для поиска ошибок. </li></ul><ul><li>Кто знает perl debugger – знает perl </li></ul><ul><li>В этой презентации целью является - показать, как отлаживать ваш mod_perl проект так же, как если бы вы работали через debugger с cgi или pl скриптом. </li></ul><ul><li>Предполагается, что Вы уже знаете: </li></ul><ul><li>команды perl debugger </li></ul><ul><li>имеете общее представление о mod_perl </li></ul><ul><li>имеете общее представление о httpd.conf </li></ul><ul><li>Так же, рассчитываю, что у Вас под рукой уже есть рабочее приложение под mod_perl , которое и станет нашим полигоном для испытаний ;) </li></ul>
  4. 4. Немного про mod_perl <ul><li>mod_perl – это модуль к веб серверу Apache . </li></ul><ul><li>Единственное его назначение – это подгрузить ваш perl- код сразу в каждый чилд apache . Такой подход позволяет экономить время на компиляции. Получается весьма быстро. </li></ul><ul><li>Достигается это тем, что весь код как бы «оборачивается» стандартным для mod_perl описанием, и итоговый код представляет собой единый листинг* с кодом вашего приложения указанным для обработки в httpd.conf . </li></ul><ul><li>*Именно по этой причине, вы не можете обращаться к секции __DATA__ ваших скриптов. </li></ul><ul><li>Есть возможность указывать сколько request (число) должен обработать каждый чилд перед тем, как «перезапуститься». Т.о. решается проблема «течки» памяти mod_perl . </li></ul><ul><li>Если выставить, что каждый чилд обрабатывает только 1 запрос и умирает, то вы получите некий эквивалент классического CGI . </li></ul>
  5. 5. Проблема mod_perl <ul><li>Единственная, действительно неразрешимая проблема mod_perl , так это то, что mod_perl просто «ускоритель» и ни чего более. </li></ul><ul><li>А это означает, что написать приложение под mod_perl можно абсолютно не читаемо, так как Вас никто не ограничивает. </li></ul><ul><li>Поскольку в perl нет инструмента более мощного для чтения чужого кода, чем perl debugger , я поражён тем, что тема практически не раскрыта в рунете. </li></ul><ul><li>Если Вы хотите иметь (по мимо высокой скорости) и удобную, читаемую структуру кода, обратите своё внимание на перловый фреймворк Catalyst . Здесь Вам и MVC , и возможность переключаться между работой под mod_perl и FastCGI без изменения кода приложения. Да и отлаживается он без дополнительных ухищрений. Большое количество плагинов, отличная документация. В общем всё, чтобы Вы остались довольны. </li></ul>
  6. 6. Почему течёт память <ul><li>В общем случае, после появления чилда apache , он уже будет содержать скомпиленный код вашего приложения. При обработке разных запросов, для каждой функции / метода в вашем приложении будет резервироваться память. И если метод для одного запроса потребовал 1Мб памяти, а для следующего ему потребовалось всего 500 Kb , то за этим методом / процессом всё равно останется зарезервированным 1Mb оперативной памяти. Так как разные запросы требуют обработки разного объёма данных, получается, что чилд apache «нажирается». </li></ul><ul><li>Конечно, есть много других моментов, скажем связанные с ссылками. Но их все можно устранить. </li></ul><ul><li>Как уже понятно, вопрос времени – когда процесс станет до неприличия жирным. Поэтому и есть такой параметр в настройках apache , отвечающий за смерть чилда после обработки определённого количества запросов. </li></ul>
  7. 7. Варианты использования mod_perl <ul><li>На практике, я встречал 3 вида использования mod_perl : </li></ul><ul><li>1. mod_perl подвязывается непосредственно к скриптам </li></ul><ul><li>Вот пример httpd.conf </li></ul><ul><li><IfModule mod_perl.c> </li></ul><ul><ul><li>Alias /developer/ / path /developer/ </li></ul></ul><ul><ul><li><Location /developer> </li></ul></ul><ul><ul><li>SetHandler perl-script </li></ul></ul><ul><ul><li>PerlHandler ModPerl::Registry </li></ul></ul><ul><ul><li>Options ExecCGI </li></ul></ul><ul><ul><li>PerlSendHeader On </li></ul></ul><ul><ul><li>allow from all </li></ul></ul><ul><ul><li></Location> </li></ul></ul><ul><li></IfModule> </li></ul><ul><li>Здесь указывается, что при обращении по пути url/developer/ … задействовать скрипты, которые находятся в папке /path/developer (см Alias ). </li></ul><ul><li>*отдельно отмечу, что в конфигах старых версий apache может встречаться </li></ul><ul><li>PerlHandler Apache::PerlRun </li></ul>
  8. 8. Варианты использования mod_perl <ul><li>По пути /path/developer у нас может быть скрипт типа simple_example.pl с контентом: </li></ul><ul><li>use Apache2::Request; </li></ul><ul><li>my $r = shift; </li></ul><ul><li>$r->content_type('text/plain'); </li></ul><ul><li>$r->print(&quot;mod_perl rules! &quot;); </li></ul><ul><li>Или в более традиционном виде: </li></ul><ul><li>use Apache2::Const -compile => qw(REDIRECT NOT_FOUND); </li></ul><ul><li>sub handler{ </li></ul><ul><li>my $r = shift; </li></ul><ul><li>$r->send_http_header('text/plain'); </li></ul><ul><li>print &quot;mod_perl rules! &quot;; </li></ul><ul><li>return OK; </li></ul><ul><li>} </li></ul><ul><li>1; </li></ul><ul><li>И в одном и в другом случае, в браузере по пути url/develiper/imple_example.pl мы увидим: </li></ul><ul><li>mod_perl rules! </li></ul>
  9. 9. Варианты использования mod_perl <ul><li>2. mod_perl подвязывается к перл модулю, который обрабатывает $r->uri() и принимает решение какой ответ дать. </li></ul><ul><li>Вот пример httpd.conf : </li></ul><ul><li><IfModule mod_perl.c> </li></ul><ul><li>PerlModule MyPackage::Main </li></ul><ul><li><Location /> </li></ul><ul><li>SetHandler perl-script </li></ul><ul><li>PerlHandler MyPackage::Main </li></ul><ul><li></Location> </li></ul><ul><li></IfModule> </li></ul><ul><li><Location /> указывает, что нужно отдавать / обрабатывать любой request модулю MyPackage::Main </li></ul>
  10. 10. Варианты использования mod_perl <ul><li>В каком-то смысле, классический пример контента для MyPackage::Main </li></ul><ul><li>package MyPackage::Main; </li></ul><ul><li>use strict; </li></ul><ul><li>use Apache2::Request; </li></ul><ul><li>use MyPackage::Config; </li></ul><ul><li>use Apache2::Const -compile => qw(REDIRECT NOT_FOUND); </li></ul><ul><li>use Apache2::Cookie; </li></ul><ul><li>sub handler{ </li></ul><ul><li>my $r = shift; </li></ul><ul><li>my $req = Apache2::Request->new($r); </li></ul><ul><li>my $uri = $r->uri(); </li></ul><ul><li>my $cfg = MyPackage::Config->new(); </li></ul><ul><li>my $page_controller = undef; </li></ul><ul><li>my $answer = undef; </li></ul><ul><li>if($uri =~ /^/foo/bar/){ </li></ul><ul><li>... </li></ul><ul><li>... </li></ul><ul><li>} </li></ul>
  11. 11. Варианты использования mod_perl <ul><li>3. mod_perl реализуется как симбиоз вариантов 1 и 2. </li></ul><ul><li>Сложно сказать, какой путь для Вас более оптимален. Пожалуй чаще, встречается вариант2. </li></ul>
  12. 12. Проблема отладки mod_perl <ul><li>Как уже понятно, речь идёт о подключении perl debugger к perl коду в чилде apache . </li></ul><ul><li>Так как рунете сложно найти описание подобного механизма, многие предпочитают использовать отладку на warn . Т.е. расставляют warn , запускают, смотрят лог, перемещают warn , запускают программу и т.д. до тех пор, пока ошибка не локализуется достаточно, чтобы программист её нашёл. </li></ul><ul><li>Особенно забавно, что многие отлаживают на warn продакшн код. И если речь идёт о часто используемом месте проекта, то даже за несколько секунд лог может получиться ёмким. Добавим к этому «ошибка появляется редко» и, получается, что времени на локализацию проблемы уходит много. </li></ul><ul><li>С perl debugger вы находитесь внутри исполняемой программы и можете без труда «с первого захода» успешно локализовать код с ошибкой. </li></ul>
  13. 13. Подключение debugger <ul><li>Для отладки нам потребуется: </li></ul><ul><li>Создать собственные конфиги apache (в home ) </li></ul><ul><li>Прописать обработку каждого запроса через perl отладчик </li></ul><ul><li>Запустить httpd процесс в non-forking режиме (один чилд) с обработкой через perl debugger и нашими конфигами </li></ul><ul><li>Запросить url через браузер, и приступить к отладке </li></ul><ul><li>Корректно выйти из отладчика </li></ul><ul><li>Итак, приступим. </li></ul>
  14. 14. Собственные конфиги apache <ul><li>Рассмотрим следующий вариант работы apache: </li></ul><ul><li>1 – определение вашего приложения в обработке mod_perl </li></ul><ul><li>2 – появление чилдов apache с проинициализированным кодом вашего perl приложения </li></ul><ul><li>3 – запрос пользователя, который перенаправляется apache на один из своих child </li></ul>Apache Ваше perl приложение mod_perl WEB C H I L D C H I L D C H I L D C H I L D 1 2 3
  15. 15. Собственные конфиги apache <ul><li>Как было сказано вначале, я считаю, что у Вас уже есть рабочее mod_perl приложение. </li></ul><ul><li>Вам необходимо найти httpd.conf </li></ul><ul><li>Сделать это можно так: </li></ul><ul><li>$ httpd –V </li></ul><ul><li>Конфиг apache будет по пути HTTPD_ROOT .’/’. SERVER_CONFIG_FILE </li></ul><ul><li>Например, если HTTPD_ROOT=&quot;/usr/local&quot; и SERVER_CONFIG_FILE=&quot;etc/apache22/httpd.conf&quot; , </li></ul><ul><li>то полный путь к конфигу будет /usr/local / etc/apache22/httpd.conf </li></ul><ul><li>Откопируем его в наш хомяк: </li></ul><ul><li>$ cp /usr/local / etc/apache22/httpd.conf ~/ httpd.conf </li></ul>
  16. 16. Собственные конфиги apache <ul><li>Откройте для редактирования ~/httpd.conf Обратите внимание на параметр Listen. Его значение означает порт, который слушает apache . </li></ul><ul><li>Обычно это 80-й, 81-й порт. Порты, как известно, до 1024-го привилегированные. Поэтому в нашем конфиге поставим любой свободный порт, а-ля : </li></ul><ul><li>Listen 3000 </li></ul><ul><li>Пусть ваш username в системе – yesiam . И хомяк по пути /home/yesiam. </li></ul><ul><li>Меняем параметры: </li></ul><ul><li>ErrorLog &quot;/home/yesiam/httpd-error.log&quot; </li></ul><ul><li>CustomLog &quot;/home/yesiam/httpd-access.log&quot; combined </li></ul><ul><li>Но это ещё не всё. </li></ul>
  17. 17. Собственные конфиги apache <ul><li>Хороший админ не описывает виртхосты в самом httpd.conf . Для этого, он использует такой параметр, как: </li></ul><ul><li>Include etc/apache22/Includes/*.conf </li></ul><ul><li>В вашем случае, путь может отличаться. </li></ul><ul><li>Здесь говорится: «дополни данные конфига, содержимым файлов с расширением conf по пути $ HTTPD_ROOT / etc/apache22/Includes/» </li></ul><ul><li>Если у вас есть такая директива, то ищите описания виртхостов в указанной папке и откопируйте в хомяк нужное описание. Пусть это будет файл mysite.conf . </li></ul><ul><li>$ cp /usr/local / etc/apache22/Includes/ mysite.conf ~/mysite.conf </li></ul><ul><li>В ~/httpd.conf поменяйте: </li></ul><ul><li>Include etc/apache22/Includes/*.conf </li></ul><ul><li>на </li></ul><ul><li>Include /home/ yesiam / mysite .conf </li></ul><ul><li>И, последний штрих в ~/httpd.conf: </li></ul><ul><li>PidFile /home/ yesiam /apache.pid </li></ul><ul><li>LockFile /home/ yesiam /accept.lock </li></ul>
  18. 18. Собственные конфиги apache <ul><li>Итак, мы сделали описание для apache , но ещё никак не затронули описание виртхоста, который как раз и работает у нас с mod_perl . Как было сказано выше, это описание может быть и в самом httpd.conf , так и в отдельном файле. Я рассматриваю случай отдельного описания в mysite.conf . Его содержимое изначально будет (к примеру): </li></ul><ul><li><VirtualHost *:80> </li></ul><ul><li>ServerName mysite.ru:80 </li></ul><ul><li>CustomLog /var/log/access.log combined </li></ul><ul><li>ErrorLog /var/log/error.log </li></ul><ul><li>DocumentRoot /site </li></ul><ul><li>.... </li></ul><ul><li><IfModule mod_perl.c> </li></ul><ul><li>PerlModule MyPackage::Main </li></ul><ul><li><Location /> </li></ul><ul><li>SetHandler perl-script </li></ul><ul><li>PerlHandler MyPackage::Main </li></ul><ul><li></Location> </li></ul><ul><li></IfModule> </li></ul><ul><li></VirtualHost> </li></ul><ul><li>Содержимое должно быть вам понятно. </li></ul>
  19. 19. Собственные конфиги apache <ul><li>Отредактируем его ( ~/ mysite.conf ) до вида: </li></ul><ul><li><VirtualHost * :3000 > </li></ul><ul><li>ServerName mysite.ru :3000 </li></ul><ul><li>CustomLog /home/ yesiam /log/ access.log combined </li></ul><ul><li>ErrorLog /home/ yesiam /log/ error.log </li></ul><ul><li>DocumentRoot /site </li></ul><ul><li>.... </li></ul><ul><li><IfModule mod_perl.c> </li></ul><ul><li>PerlModule MyPackage::Main </li></ul><ul><li><Location /> </li></ul><ul><li>SetHandler perl-script </li></ul><ul><li>PerlHandler MyPackage::Main </li></ul><ul><li></Location> </li></ul><ul><li></IfModule> </li></ul><ul><li></VirtualHost> </li></ul><ul><li>Не забудьте создать папку ~/log </li></ul><ul><li>Итак, мы скопировали конфиги к себе в хомяк, отредктировали их так, что: </li></ul><ul><li>при запуске мы будем слушать порт 3000 </li></ul><ul><li>все логи, pid- файлы и lock- файлы будут храниться в нашем хомяке </li></ul><ul><li>Осталось сделать тестовый запуск. </li></ul>
  20. 20. Тестовый запуск <ul><li>Все обращения, что до этого вы делали на http://mysite.ru:80 или http://mysite.ru:8 1 (зависит от Listen в изначальном httpd.conf ) к этому apache должны быть доступны и при обращении к http://mysite.ru: 3000 </li></ul><ul><li>Пусть mod_perl у вас обрабатывал урл http://mysite.ru:80/12345/rss.xml </li></ul><ul><li>Запускаем «наш» apache в non-forking режиме (т.е. у вас будет только 1 чилд) с нашими конфигами: </li></ul><ul><li>$ httpd -X -k start -f ~/httpd.conf </li></ul><ul><li>И заходим по урл http://mysite.ru: 3000 /12345/rss.xml </li></ul><ul><li>Вы должны увидеть точно такой же ответ в браузере, как если бы Вы зашли на http://mysite.ru:80/12345/rss.xml </li></ul><ul><li>Если у вас произошла ошибка, посмотрите файлы логов ошибок в своём хомяке. Проблема, если и будет, должна решиться легко. </li></ul><ul><li>Заметьте, Вы не мешаете работе продакшн кода! И, при этом, локализовали чилд apache на отдельном порту. Вам не потребовалась помощь админа, или какие-то особые права. </li></ul>
  21. 21. Прикручиваем perl debugger <ul><li>Теперь нам осталось подключить perl debugger в каждый чилд apache. А поскольку мы запускаемся в non-forking режиме, то – только к одному. </li></ul><ul><li>Для этого добавим в вверх описания виртхоста: </li></ul><ul><li><VirtualHost *:3000> </li></ul><ul><li>ServerName mysite.ru:3000 </li></ul><ul><li>CustomLog /home/ yesiam /log/access.log combined </li></ul><ul><li>ErrorLog /home/ yesiam /log/error.log </li></ul><ul><li>DocumentRoot /site </li></ul><ul><li><IfDefine PERLDB> </li></ul><ul><li><Perl> </li></ul><ul><li>use Apache::DB (); </li></ul><ul><li>Apache::DB->init; </li></ul><ul><li></Perl> </li></ul><ul><li><Location /> </li></ul><ul><li>PerlFixupHandler Apache::DB </li></ul><ul><li></Location> </li></ul><ul><li></IfDefine> </li></ul><ul><li>.... </li></ul><ul><li><IfModule mod_perl.c> </li></ul><ul><li>PerlModule MyPackage::Main </li></ul><ul><li><Location /> </li></ul><ul><li>SetHandler perl-script </li></ul><ul><li>PerlHandler MyPackage::Main </li></ul><ul><li></Location> </li></ul><ul><li></IfModule> </li></ul><ul><li></VirtualHost> </li></ul>
  22. 22. Тестовый запуск с perl debugger <ul><li>Итак, запускаем: </li></ul><ul><li>$ httpd -X -D PERLDB -f ~/httpd.conf </li></ul><ul><li>И, видим приветствие: </li></ul><ul><li>[notice] Apache::DB initialized in child 17524 </li></ul><ul><li>Набираем в браузере урл http://mysite.ru: 3000 /12345/rss.xml и видим, что отладчик остановился в handler нашего MyPackage::Main </li></ul><ul><li>MyPackage::Main::handler(/site/MyPackage/Main.pm:14): </li></ul><ul><li>14: my $r = shift; </li></ul><ul><li>Всё. Теперь Вы можете приступить к отладке используя стандартные команды perl отладчика. </li></ul>
  23. 23. Тестовый запуск с perl debugger <ul><li>В отличие от стандартной работы с отладчиком, вы можете указать команду «с» и при этом ваш чилд apache сразу вернёт ответ браузеру (если в коде не встречается $DB::signal ). И сделать ещё одно обращение к урл. При этом, отладчик снова остановится на методе handler вашего модуля. </li></ul><ul><li>Так же стоит уделить внимание корректному выходу из отладчика. Помните, когда вы запустили apache ( httpd -X -D PERLDB -f ~/httpd.conf ) , то он сообщил Вам номер процесса в системе ( initialized in child 17524 ). Так вот, корректный выход будет таким (номер процесса, конечно индивидуален): </li></ul><ul><li>DB<3> !! kill 17524 </li></ul><ul><li>DB< 4 > q </li></ul><ul><li>Или есть такой вариант: </li></ul><ul><li>DB<3> p $$ </li></ul><ul><li>17524 </li></ul><ul><li>DB<4> !! kill 17524 </li></ul><ul><li>DB<5> q </li></ul><ul><li>Т.е. вы сначала «убиваете» процесс чилда apache , и потом выходите из отладки. </li></ul><ul><li>*команда «!!» в отладчике передаёт последующие аргументы в shell </li></ul>
  24. 24. Сложности структуры Вашего проекта <ul><li>Конечно, Ваш проект может быть не так прост. У Вас скорее всего есть Nginx , который может балансировать между несколькими apache на нескольких серверах. Сложность будет в том случае, если на уровне nginx.conf у вас прописано изменение порядка или набора uri аргументов. К примеру для сайта globalsite.ru ( вымышленное ) в nginx.conf может быть: </li></ul><ul><li>server { </li></ul><ul><li>listen 80; </li></ul><ul><li>server_name globalsite.ru www.globalsite.ru; </li></ul><ul><li>location /archives/ { </li></ul><ul><li> if ($uri ~ (d+)/rss.xml){ </li></ul><ul><li>set $q $1; </li></ul><ul><li>rewrite / /rss/$q; </li></ul><ul><li>proxy_pass http://mysite.ru:80; </li></ul><ul><li>break; </li></ul><ul><li>} </li></ul><ul><li>.... </li></ul><ul><li>Т.е. обращения на http:// globalsite.ru /archives/12345/rss.xml перенаправляются на http://mysite.ru/rss/12345 При этом, если вы тестируете mod_perl на mysite.ru помните о реврайтах на уровне Nginx. И, в нашем случае, за http:// globalsite.ru /archives/12345/rss.xml будет отвечать http://mysite.ru:3000/rss/12345 </li></ul>
  25. 25. Материал и данные по тестированию <ul><li>За основу было взято описание процесса отладки с http://perl.apache.org/docs/1.0/guide/debug.html </li></ul><ul><li>И проверено на практике. </li></ul><ul><li>Тестирование проводилось на FreeBSD 6.2 и Apache/2.2.11 </li></ul>
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×