| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Общие вопросы > end : Private and begin : Private catalyst |
| Автор: gcc 19.2.2009, 16:15 | ||||
1) как сделать чтобы часть кода была во всех методах сразу при вызове (чтобы не писать одно и тоже)?
в других метода ошибка от use strict что $dbh не инициализирован.... 2) как уничтожыть соединение от бызы во всех методах $dbh->disconnect(); так по-моиму не правильно...
в документации написано нормально, но примеров реальных я не ивдел, не знаю как тут сделать.. кстате, не кто не видел большую программу на каталисте чтобы исходники посмотреть? |
| Автор: sir_nuf_nuf 19.2.2009, 17:33 | ||
| зачем вам уничтожать соединение руками ? сервер дофига быстрый ? =) вам нужно только
и далее делает что хотите.. зря что ли люди писали Model::DBI как не писать везде.. интересный вопрос. Вообще в OOP для этого используют наследование или делегацию. В Catalys - есть такая фича - если begin/end/process не определен в каком -то контроллере, то будет предпринята попытка вызвать его у корневого контроллера (тот который YourApp/Сontroller/Root.pm) определите свои методы. там. и при необходимости перекрывайте их (замечу еще раз - это не наследование!) Было бы клево, если бы вы проверили - Catalyst проходит при поиске действия все контроллеры в иерархии или только Root.pm |
| Автор: gcc 20.2.2009, 03:06 | ||||
тогда не надо писать $dbh->disconnect(); ? вот типо работает:
|
| Автор: gcc 20.2.2009, 03:26 | ||
| http://github.com/jrockway/angerwhale/blob/95da08ea31d2005de3b21f93049e89ffcc0ffaf7/lib/Angerwhale/Controller/Captcha.pm подскажите, пожалуйста, что делают приватные методы, точнее как они вызываються? (именно код мне комментировать не надо) когда эти методы приватные вызываються и как? в других классах их не видно? не могу понять в чем смысл от этих методов?
|
| Автор: sir_nuf_nuf 20.2.2009, 13:40 | ||
| gcc, ты имел в виду private actions ? работают точно так же как и другие, но Catalyst не сопоставляет их ни с какими URL. Другими словами private action нельзя вызвать HTTP запросом, можно только из другого action.. наприрмер так:
Вообщем их можно вызывать через $c->forward $c->detach $c->visit |
| Автор: gcc 20.2.2009, 13:46 |
| sir_nuf_nuf, спасибо, понял этом примере по ссылке котрую я написал, они нигде не вызываються они в других контроллерах вызываються наверное... по первому посту такая ошибка: Caught exception in MyApp::Controller::Root->auto "DBD::mysql::st execute failed: MySQL server has gone away at /usr/local/lib/perl5/site_perl/5.8.8 /Catalyst/Plugin/Authentication/Store/DBI.pm line 175." появляется ошибка через раз... |
| Автор: sir_nuf_nuf 20.2.2009, 14:16 |
| gcc, код смотреть.. как же еще ) |
| Автор: gcc 20.2.2009, 14:27 | ||
| извените, я плохо выразился если это поставить, то такая ошибка...
|
| Автор: sir_nuf_nuf 20.2.2009, 14:32 |
| gcc, "это" - это аттрибут Private ? В каком контроллере ? |
| Автор: gcc 20.2.2009, 14:42 | ||||
| sir_nuf_nuf, я нашел это не из-за privat я ошибку нашел тут
если убрать $dbh то работает... но как отключатся от базы? Добавлено через 5 минут и 57 секунд
кстате, а какая разница в каком от контроллере? если метод check_captcha : Private не запускается в том контроллере где он есть... он где угодно может же запуститься, если я правильно понял... |
| Автор: sir_nuf_nuf 20.2.2009, 14:56 |
а зачем ? Если у вас mod_perl или FCGI - тогда наоборот надо поддерживать соединения для производительности. А если CGI - то они сами закроются. |
| Автор: gcc 20.2.2009, 15:05 | ||||
это "пул соединений"? когда его включаю на С++ прогармме и когда идет сбой, то MyISA таблица разваливается, и восстанавливатся не хочет, надо заходить в консоль MySQL и только руками восстанаваливать, "REPAID table" Добавлено @ 15:09
это точная информация? я когда-то сидел тестировал долго без метода дисконекта и сервер mysql мне ответил что "сервер гон" из-за того что много соединений висит... их конечно надо рубать, но на хостинге например только дается только определенное количество соединений в час... а потом не будет отвичать пользователю, таймаутов там нету почему-то |
| Автор: gcc 21.2.2009, 14:15 |
| кто знает скажи как дисконект сделать, может быть как-то можно переблагословить? |
| Автор: gcc 22.2.2009, 16:34 |
| извените, не подумал что есть "уничтожитель" в Catalyst-Model-DBI а подключение делать не надо, можно просто писать my $sth = $c->model(’DBI’)->dbh->prepare |
| Автор: gcc 2.8.2009, 14:35 | ||
| все таки как отключиться от базы автоматически? мне каталист говорил что превышен max_connect_user, что делать? это из-за того что нету $dbh->disconnect;? на сервер еще работает сайт на пхп, 1000 хостов - все номрально в Catalyst::Model::DBI видно:
я так понял что оно не разрывает соединение где-то? |
| Автор: gcc 4.8.2009, 19:58 |
| подскажите как исправить это? как посмотреть какое запрос "висит"? если это можно, какие варианты? |
| Автор: gcc 6.8.2009, 23:11 | ||||
что вы имеете ввиду? включить pool connect? как это включить? (что-то я не нашел в чем проблема, там извратили что-то из сессиями и авторизаций, сделали какие-то странные запросы...) ...эти запросы висят и со временем подключение к mysql становиться не возможным
|