Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> end : Private and begin : Private catalyst 
:(
    Опции темы
gcc
Дата 19.2.2009, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



1) как сделать чтобы часть кода была во всех методах сразу при вызове (чтобы не писать одно и тоже)?

Код

sub begin : Private { 
   my ($self, $c) = @_;
   my $dbh = $c->model('DBI')->dbh;
   
       if ($c->user_exists() > 0) { 
    $c->stash->{user_admin} = 1 if ($c->user->{user}->{username} eq 'admin');
    $c->stash->{user_username} =  $c->user->{user}->{username};
    }

    $c->stash->{user_exists} = $c->user_exists();    
}

в других метода ошибка от use strict что $dbh не инициализирован....

2) как уничтожыть соединение от бызы во всех методах    $dbh->disconnect();

так по-моиму не правильно...
Код

sub end : Private {
   my ($self, $c) = @_;
   $c->forward('MyApp::View::HTML::Template');
   $dbh->disconnect();
}


в документации написано нормально, но примеров реальных я не ивдел, не знаю как тут сделать..

кстате, не кто не видел большую программу на каталисте чтобы исходники посмотреть? 



Это сообщение отредактировал(а) gcc - 20.2.2009, 06:34
PM WWW ICQ Skype GTalk Jabber   Вверх
sir_nuf_nuf
Дата 19.2.2009, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 6.1.2008

Репутация: 14
Всего: 31



зачем вам уничтожать соединение руками ? сервер дофига быстрый  ? =) 
вам нужно только
Код

 $c->model('DBI')->dbh

и далее делает что хотите.. зря что ли люди писали Model::DBI


как не писать везде.. интересный вопрос.
Вообще в OOP для этого используют наследование или делегацию.
В Catalys - есть такая фича - если begin/end/process не определен в каком -то контроллере, то будет предпринята попытка
вызвать его у корневого контроллера  (тот который YourApp/Сontroller/Root.pm)

определите свои методы. там. и при необходимости перекрывайте их

(замечу еще раз - это не наследование!)

Было бы клево, если бы вы проверили -  Catalyst проходит при поиске действия все контроллеры в иерархии или только Root.pm


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
gcc
Дата 20.2.2009, 03:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



Цитата(sir_nuf_nuf @ 19.2.2009,  17:33)
зачем вам уничтожать соединение руками ? сервер дофига быстрый  ? =) 

тогда не надо писать $dbh->disconnect(); ?


вот типо работает:

Код

sub auto : Private {
    my ( $self, $c ) = @_;
    my $dbh = $c->model('DBI')->dbh;
    $c->stash->{'dbh'} = $dbh;

     if ($c->user_exists() > 0) {
    $c->stash->{user_admin} = 1 if ($c->user->{user}->{username} eq 'admin');
    $c->stash->{user_username} =  $c->user->{user}->{username};
    }
    $c->stash->{user_exists} = $c->user_exists();

    return 1;
}


sub end : ActionClass('RenderView') {}

sub end : Private {
   my ($self, $c) = @_;
   $c->forward('MyApp::View::HTML::Template');
   my $dbh = $c->model('DBI')->dbh;
   $dbh->disconnect();
}


Это сообщение отредактировал(а) gcc - 20.2.2009, 06:39
PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 20.2.2009, 03:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



http://github.com/jrockway/angerwhale/blob...ller/Captcha.pm

подскажите, пожалуйста, что делают приватные методы, точнее как они вызываються? (именно код мне комментировать не надо)

когда эти методы приватные вызываються и как? в других классах их не видно? не могу понять в чем смысл от этих методов?

Код


sub captcha_uri : Private {
    my ($self, $c) = @_;
    return if $c->stash->{user}; # XXX user
    return if $c->session->{got_captcha};
    return $c->uri_for('/captcha/captcha');
}
  
=head2 check_captcha($guess)
 
Returns true if the guess is the text in the captcha.
 
=cut
 
sub check_captcha : Private {
    my ($self, $c, $guess) = @_;
 
    return unless ref $c->session->{captcha};
    
    if($c->session->{got_captcha} || $c->session->{captcha}->{rnd} eq $guess){
        $c->session->{got_captcha} = 1; # only need to guess one per session
        return 1;
    }
    return;
}


Это сообщение отредактировал(а) gcc - 20.2.2009, 10:49
PM WWW ICQ Skype GTalk Jabber   Вверх
sir_nuf_nuf
Дата 20.2.2009, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 6.1.2008

Репутация: 14
Всего: 31



gcc, ты имел в виду private actions ?
работают точно так же как и другие, но Catalyst не сопоставляет их ни с какими URL.
Другими словами private action нельзя вызвать HTTP запросом, можно только из другого action.. наприрмер так:

Код

sub check : Global {  #/check
    my ($self, $c) = @_;
    $c->forward($c->action('check_captcha'));
}

sub check_captch : Private {
    # bla bla
}


Вообщем их можно вызывать через
$c->forward
$c->detach
$c->visit


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
gcc
Дата 20.2.2009, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



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.
"

появляется ошибка через раз...

Это сообщение отредактировал(а) gcc - 20.2.2009, 14:22
PM WWW ICQ Skype GTalk Jabber   Вверх
sir_nuf_nuf
Дата 20.2.2009, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 6.1.2008

Репутация: 14
Всего: 31



gcc, код смотреть.. как же еще )


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
gcc
Дата 20.2.2009, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



извените, я плохо выразился

если это поставить, то такая ошибка...

Код

sub begin : Private { 
   my ($self, $c) = @_;
   
       if ($c->user_exists() > 0) { 
    $c->stash->{user_admin} = 1 if ($c->user->{user}->{username} eq 'admin');
    $c->stash->{user_username} =  $c->user->{user}->{username};
    }
    $c->stash->{user_exists} = $c->user_exists();    
}

PM WWW ICQ Skype GTalk Jabber   Вверх
sir_nuf_nuf
Дата 20.2.2009, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 6.1.2008

Репутация: 14
Всего: 31



gcc, "это" - это аттрибут Private ?  В каком контроллере ?


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
gcc
Дата 20.2.2009, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



sir_nuf_nuf,  я нашел это не из-за privat

я ошибку нашел тут

Код

sub end : Private {
   my ($self, $c) = @_;
   $c->forward('MyApp::View::HTML::Template');
   my $dbh = $c->model('DBI')->dbh;
   $dbh->disconnect();
}


если убрать $dbh то работает...

но как отключатся от базы?

Добавлено через 5 минут и 57 секунд
Цитата(sir_nuf_nuf @ 20.2.2009,  14:32)
gcc, "это" - это аттрибут Private ?  В каком контроллере ?

кстате, а какая разница в каком от контроллере?

если метод check_captcha : Private  не запускается в том контроллере где он есть... он где угодно может же запуститься, если я правильно понял...

Это сообщение отредактировал(а) gcc - 20.2.2009, 14:46
PM WWW ICQ Skype GTalk Jabber   Вверх
sir_nuf_nuf
Дата 20.2.2009, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 6.1.2008

Репутация: 14
Всего: 31



Цитата(gcc @  20.2.2009,  14:42 Найти цитируемый пост)
но как отключатся от базы?

а зачем ? Если у вас mod_perl или FCGI - тогда наоборот надо поддерживать соединения для производительности.
А если CGI - то они сами закроются.


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
gcc
Дата 20.2.2009, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



Цитата(sir_nuf_nuf @ 20.2.2009,  14:56)
а зачем ? Если у вас mod_perl или FCGI - тогда наоборот надо поддерживать соединения для производительности.

это "пул соединений"? когда его включаю на С++ прогармме и когда идет сбой, то MyISA таблица разваливается, и восстанавливатся не хочет, надо заходить в консоль MySQL и только руками восстанаваливать, "REPAID table"

Добавлено @ 15:09
Цитата(sir_nuf_nuf @ 20.2.2009,  14:56)
А если CGI - то они сами закроются.

это точная информация?

я когда-то сидел тестировал долго без метода дисконекта и сервер mysql мне ответил что "сервер гон" из-за того что много соединений висит...

их конечно надо рубать, но на хостинге например только дается только определенное количество соединений в час...  а потом не будет отвичать пользователю, таймаутов там нету почему-то





Это сообщение отредактировал(а) gcc - 20.2.2009, 15:12
PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 21.2.2009, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



кто знает скажи как дисконект сделать, может быть как-то можно переблагословить?
PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 22.2.2009, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



извените, не подумал что есть "уничтожитель" в Catalyst-Model-DBI

а подключение делать не надо, можно просто писать my $sth = $c->model(’DBI’)->dbh->prepare

Это сообщение отредактировал(а) gcc - 22.2.2009, 17:32
PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 2.8.2009, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



все таки как отключиться от базы автоматически?

мне каталист говорил что превышен max_connect_user, что делать? это из-за того что нету $dbh->disconnect;?
 
на сервер еще работает сайт на пхп, 1000 хостов - все номрально

в Catalyst::Model::DBI 

видно:
Код

sub disconnect {
        my $self = shift;
        if( $self->connected ) {
                $self->_dbh->rollback unless $self->_dbh->{AutoCommit};
                $self->_dbh->disconnect;
                $self->_dbh( undef );
        }
}

sub DESTROY {
        my $self = shift;
        $self->disconnect if (defined $self->_dbh);
}



я так понял что оно не разрывает соединение где-то?


Это сообщение отредактировал(а) gcc - 2.8.2009, 14:36
PM WWW ICQ Skype GTalk Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1001 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.