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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> работа с mySQL, обработка ошибок, реконект 
V
    Опции темы
Secandr
Дата 11.3.2015, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

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



noize, пока всё проще. Я забыл в продакшен выложить скрипты с изменениями smile


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
noize
Дата 11.3.2015, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


5.18.2
*


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

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



я предпочитаю с подобными делами(база, кеш) всегда работать через методы. Так у вас всегда имеется единственная точка входа и если надо поменять логику работы с базой, то достаточно изменить только один метод и всё заработает.
PM MAIL   Вверх
Secandr
Дата 12.3.2015, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

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



noize я начал этот проект 7 лет назад со скриптов на bash, лет 6 назад перешёл на перл, лет 5 назад переписал всё в функциональном стиле. 3 года назад перешёл на ООП. Полтора года назад провёл рефакторинг бибилиотеки, поскольку не совсем понял парадигму ООП с первого раза.

Если бы я был программистом, было бы проще smile


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
Pfailed
Дата 13.3.2015, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 22
Всего: 39



Цитата(noize @ 10.3.2015,  23:01)
простенький пример из жизни:

Код

my $DBH;

sub dbh {
    unless ( $DBH || $DBH->ping ) {
        $DBH = DBI->connect();
        croak "Can't connect to database: " . $DBH->err if $DBH->err;
    }

    return $DBH;
}

print dbh->selectrow_array( qq/ SELECT NOW() / );


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

А не
Код

unless ($DBH && $DBH->ping)

?


--------------------
PM MAIL   Вверх
Bulat
Дата 13.3.2015, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 5
Всего: 57



Цитата(Secandr @  12.3.2015,  10:00 Найти цитируемый пост)
Полтора года назад провёл рефакторинг бибилиотеки, поскольку не совсем понял парадигму ООП с первого раза.

Если бы я был программистом, было бы проще

А где ты здесь увидел программистов??  smile 

Лично я сколько не пытался писать проекты в ООП стиле - честно говоря, ничем хорошим это так и не заканчивалось!  smile 

P.S. хотя я кстати-таки дипломированный программист!  smile 


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
Secandr
Дата 13.3.2015, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

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



Bulat, я дипломированный металлург smile
И ООП мне был не нужен нафик. Пока проект не вырос до размеров полноценной библиотеки. Без наследования и разбивки по классам код стал совершенно нечитаем. Пришлось перейти на ООП. И оказалось, что это чрезвычайно удобно.

Вот только отсутствие опыта иногда сильно затрудняет разработку.



Pfailednoize, спасибо, будут допиливать SQL.

Кстати, трое суток, полёт нормальный, похоже просто по таймауту дох коннект.


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
Secandr
Дата 13.3.2015, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

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



Сделал так:

Код

package noDB;
use DBI;
use base qw(noNull);
 
sub new { # конструктор
 my $class = shift; 
 $DBname =  shift;
 my %name;
 $name{'DBname'}=$DBname;
 $class->debug("new device $IP");
 return bless \%name , $class; 
 }

sub connect {
 my $class = shift;
 $class->debug("connect to $class->{DBname}");

 my $dsn; my $usr; my $pwd; 
 if ($class->{DBname} eq 'helpdesk'){
#
#
#
  }elsif($class->{DBname} eq 'TVradius'){
#
#
#
  }elsif($class->{DBname} eq 'ONOF'){
#
#
#
  }else{
    die("could not connect to DB  $class->{DBname} no such name")
  }

    $class->{DBI}=DBI->connect($dsn, $usr, $pwd,  
        , {
           RaiseError        => 0,
              PrintError        => 1,
            mysql_auto_reconnect => 1,
              mysql_init_command    => q{SET CHARACTER SET 'utf8'}
          }        
        ) or die "could not connect to helpdesk";

  
 return $class;
}

sub prepare {
 my $class = shift;
 $class->debug("DBprepare");
 my $sql=shift;
 if (! $class->{DBI}->ping()){
   $class->error("DB $class->{DBname} Faild");
  sleep (60);
  $class->connect;
 }
 my $res = $class->{DBI}->prepare($sql);
 if ($res->err){
    $class->error("\ncould not prepare \n$sql\nfor DB $class->{DBname}. Got error:".$res->err);
    die "SQL prepare die";
 }
 $res->execute;
 
 if ($res->err){
    $class->error("\ncould not prepare \n$sql\nfor DB $class->{DBname}. Got error:".$res->err);
    die "SQL execute die";
 }
 return $res;
}


return 1


Заменил в основном коде DBI на noDB. Убрал do и execute.

В продакшен пока выкладывать не буду.

Это сообщение отредактировал(а) Secandr - 13.3.2015, 16:58


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
noize
Дата 13.3.2015, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


5.18.2
*


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

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



Цитата(Pfailed @  13.3.2015,  09:44 Найти цитируемый пост)
А не
Выделить всёБез подсветки
1:
    
unless ($DBH && $DBH->ping)



Да, там нужно условие '&&' вместо '||', пардон. Написал в спешке)

Добавлено через 8 минут и 49 секунд
Secandr, советую используйте прагмы 'strict' и 'warnings' везде, где это возможно.
Это позвлит кардинально сократить количество возможных ошибок.

Понимаю, что вы не профессиональный разработчик, но лучше всё-же брать на вооружение практики хорошего программирования.
у меня на работе начальник тоже разраб уровня любителя, пишет в стиле perl4. Когда встречаю скрипты, написанные им, то тупо их полностью переписываю, т.к. что-то там править мне стрёмно - можно сделать только хуже.
PM MAIL   Вверх
Secandr
Дата 16.3.2015, 09:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

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



noize, а разве use не наследуются через "use base qw(noNull);" ?

У нас с программистами всё гораздо проще. Они на perl не пишут. Я по своему софту делаю ТЗ, сдаю им на разработку, свой софт по окончанию разработки уьиваю.
А сам пишу софт только в том случае, когда быстрее написать софт, чем ТЗ.


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
Pfailed
Дата 16.3.2015, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 22
Всего: 39



Secandr, strict и warnings не наследуются, они включают своё действие только в области где были заuseны

Добавлено через 2 минуты и 55 секунд
Либо в noNull надо создать метод import и в нём сделать вот так https://metacpan.org/source/SRI/Mojolicious...ojo/Base.pm#L42
Тогда и в noDB будут действовать strict и warnings.


--------------------
PM MAIL   Вверх
Secandr
Дата 16.3.2015, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

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



Pfailed, Спасибо. А я-то думал, что наследуются...


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
Bulat
Дата 17.3.2015, 08:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 5
Всего: 57



Цитата(Secandr @  16.3.2015,  09:31 Найти цитируемый пост)
У нас с программистами всё гораздо проще. Они на perl не пишут.

Скучные у вас какие-то программисты...  smile 


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
Secandr
Дата 17.3.2015, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

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



Bulat, инженеры у нас обычно знают 1-2 языка программирования и пишут на чём умеют. Я в том числе пишу на perl, просто потому что его выучил ещё 10 лет назад.

А программисты используют тот язык который будет удобнее для проекта. И обычно это что-то с хорошим ООП: Java, фреймворки php, C#. Да и проекты программистов несколько отличаются от поделок инженеров масштабами.

Ну и есть замечательное разделение софта. Программисты не лезут в недософт инженеров, а инженеры не лезут в софт программистов. Если недософт инженеры не успевают поддерживать, его переписывают программисты.

Я только в страшном сне могу представить систему управления предприятием написанную на perl или биллинг, к примеру smile

Так что да. У нас скучные программисты smile


По теме топика: неделя прошла - полёт нормальный.
Видимо mySQL скидывал демона по timeout`у. Демон засыпает на несколько секунд, если нет работы, что бы не отъедать load на стареньком сервере.


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
tzirechnoy
Дата 17.3.2015, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: нет
Всего: 16



Цитата
 или биллинг, к примеру 


Я вполне видел биллинг на perl. Ну, большынство поделок на C# и Delphi -- хужэ.
PM MAIL   Вверх
Bulat
Дата 17.3.2015, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 5
Всего: 57



Secandr, это уже холивар и оффтоп, поэтому лучше не оффтопить! Скажу в завершении - если вы чего-то не умеете, то это не повод говорить - кошмар, в страшном сне, а хороший повод расти дальше!  smile 

Цитата(tzirechnoy @  17.3.2015,  14:53 Найти цитируемый пост)
Я вполне видел биллинг на perl. 

А я не то, что видел, но еще и дописывал новые модули для новых сервисов!  smile Дабы не нарушать общую архитектуру!  smile 


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


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

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


 




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


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

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