Size: a a a

2020 September 01

AP

Anton Petrusevich in Modern::Perl
Oleg Pronin
Да у модуля который я написал тоже самое
источник

AP

Anton Petrusevich in Modern::Perl
грубо говоря, дби становится примерно таким:
$conn->run(sub { $_->do($query) });
источник

AP

Anton Petrusevich in Modern::Perl
dbix-connector когда-то сам Рандал Шварц рекламировал
источник

OP

Oleg Pronin in Modern::Perl
источник

OP

Oleg Pronin in Modern::Perl
Можно настроить скока раз реконектится и с каким интервалом
источник

AP

Anton Petrusevich in Modern::Perl
Oleg Pronin
Можно настроить скока раз реконектится и с каким интервалом
я уже посмотрел на автора модуля :) респект, но вопрос, ты коннектор не нашёл раньше, что свой написал или он тебе чем-то не подошёл? :)
источник

AP

Anton Petrusevich in Modern::Perl
Oleg Pronin
Можно настроить скока раз реконектится и с каким интервалом
да, я такое делал наследуя дбикс-коннектор и слегка переопределяя его одну функу
источник

OP

Oleg Pronin in Modern::Perl
Anton Petrusevich
я уже посмотрел на автора модуля :) респект, но вопрос, ты коннектор не нашёл раньше, что свой написал или он тебе чем-то не подошёл? :)
Я этот модуль сделал еще работая в рамблере в 2006 году.  Когда увидел как народ делает пинг задрачивая базу, да при том пинг не гарантирует нихера.
В то время максимум чего было это dbic который 1 реконект делает и все.
источник

OP

Oleg Pronin in Modern::Perl
Что народ в 2020 году пингует базу я в полном ахуе
источник

ВР

Василий Степанович Р... in Modern::Perl
Базу пинговать перед каждым запросом - жалко таким способом удваивать количество запросов к базе.
Надо действительно усылать в базу обычный (как ни в чём ни бывало) запрос, который предусмотрен логикой задачи, а не логикой проверок доступности базы, а затем проверять успешность выполнения этого запроса.

Некоторое время я не мог понять: как узнать - успешно ли выполнился запрос или нет.

В перле я открываю соединение с базой и работаю с нею долго. В это время сервер mysqld может перезапуститься (не важно - почему) или просто разорвать соединение с перл-скриптом по таймауту и мой дескриптор соединения с базой протухнет.

Ну почитал я тут по округе сегодня немного и нашукал интересный параметр: $dbh->errno
Если после подключения из перла к mysql этот mysql-сервер перезапустился (ну это равнозначно разрыву соединения перл <-> mysql по любой причине), а я всё-равно через дескриптор старого подключения пытаюсь услать в базу запрос, то этот $dbh->errno становится непустым. Эврика? 😁

Вот кусок кода, в котором я открываю соединение с базой, пепезапускаю mysql-сервер, затем без установки нового соединения с сервером "пытаюсь" услать в него через старый протухший дескриптор запрос и потом в этом протухшем дескрипторе дивлюсь на непустой (2006) номер ошибки:

my $dbh = Mysql->Connect("localhost","test",,"nobody");
system "service mysql restart";
my $sth = $dbh->Query('select 1');
say 'errno=[' . $dbh->errno . ']';

А вот пример его работы:

Shutting down MySQL.... SUCCESS!
Starting MySQL. SUCCESS!
DBD::mysql::st execute failed: MySQL server has gone away at /usr/local/lib/perl5/5.18/Mysql.pm line 178.
errno=[2006]
источник

AP

Anton Petrusevich in Modern::Perl
Василий Степанович Родин
Базу пинговать перед каждым запросом - жалко таким способом удваивать количество запросов к базе.
Надо действительно усылать в базу обычный (как ни в чём ни бывало) запрос, который предусмотрен логикой задачи, а не логикой проверок доступности базы, а затем проверять успешность выполнения этого запроса.

Некоторое время я не мог понять: как узнать - успешно ли выполнился запрос или нет.

В перле я открываю соединение с базой и работаю с нею долго. В это время сервер mysqld может перезапуститься (не важно - почему) или просто разорвать соединение с перл-скриптом по таймауту и мой дескриптор соединения с базой протухнет.

Ну почитал я тут по округе сегодня немного и нашукал интересный параметр: $dbh->errno
Если после подключения из перла к mysql этот mysql-сервер перезапустился (ну это равнозначно разрыву соединения перл <-> mysql по любой причине), а я всё-равно через дескриптор старого подключения пытаюсь услать в базу запрос, то этот $dbh->errno становится непустым. Эврика? 😁

Вот кусок кода, в котором я открываю соединение с базой, пепезапускаю mysql-сервер, затем без установки нового соединения с сервером "пытаюсь" услать в него через старый протухший дескриптор запрос и потом в этом протухшем дескрипторе дивлюсь на непустой (2006) номер ошибки:

my $dbh = Mysql->Connect("localhost","test",,"nobody");
system "service mysql restart";
my $sth = $dbh->Query('select 1');
say 'errno=[' . $dbh->errno . ']';

А вот пример его работы:

Shutting down MySQL.... SUCCESS!
Starting MySQL. SUCCESS!
DBD::mysql::st execute failed: MySQL server has gone away at /usr/local/lib/perl5/5.18/Mysql.pm line 178.
errno=[2006]
Василий, ты пропустил что тут сегодня уже говорилось?
источник
2020 September 02

AT

Artem Tepponen in Modern::Perl
Драфт статьи
источник

AP

Andrei Protasovitski in Modern::Perl
Что-то туплю. Есть скрипт примерно такой:

use Module;
sub function { print "hello"; }


Нужно из Module вызвать function, которая в скрипте. Я точно знаю, что такое возможно, но что-то не могу сообразить, как... Подскажите, а?
источник

AP

Anton Petrusevich in Modern::Perl
лучше всего в модуль передать ссылку на нужную функу,  по имени так себе мысль то.
источник

AP

Anton Petrusevich in Modern::Perl
sub function { print "hello"; }

эта
функа "из скрипта" нахоидся в "главном" неймспейсе, то есть, main, можно вызывать её как main::function(...)
источник

AP

Andrei Protasovitski in Modern::Perl
Не работает через main::. На этом мои идеи закончились... :)
источник

AT

Artem Tepponen in Modern::Perl
package Module;

sub bar {
       main::foo(1);
}

1;

package main;

sub foo {
       my ($s) = @_;
       print $s;
}

foo(2);
Module::bar();
источник

AT

Artem Tepponen in Modern::Perl
Но я уже могу что-то не понять
источник

IB

Ivan Bessarabov in Modern::Perl
Artem Tepponen
package Module;

sub bar {
       main::foo(1);
}

1;

package main;

sub foo {
       my ($s) = @_;
       print $s;
}

foo(2);
Module::bar();
Насколько я понял, нужно чтобы заработала вот такая конструкция — https://perlbanjo.com/b2faac1d80 (менять можно только содержимое lib/Module.pm )
источник

AP

Andrei Protasovitski in Modern::Perl
Ivan Bessarabov
Насколько я понял, нужно чтобы заработала вот такая конструкция — https://perlbanjo.com/b2faac1d80 (менять можно только содержимое lib/Module.pm )
Да, всё верно. И я точно знаю, что такое возможно.
источник