小编Jav*_*ces的帖子

警告:MYSQL_OPT_RECONNECT 已弃用,并将在未来版本中删除

正如我在这里看到的,从 MySQL 8.0.34 开始,自动重新连接功能已被弃用。我有很多 Perl 脚本连接到 MySQL 数据库,例如:

my $dbh = DBI->connect( "DBI:mysql:database=$db_name;host=$db_host",
                         $db_user, $db_pass, {'RaiseError' => 1,
                         mysql_enable_utf8 => 1} );
Run Code Online (Sandbox Code Playgroud)

现在发出警告:

警告:MYSQL_OPT_RECONNECT 已弃用,并将在未来版本中删除。

我尝试将 Perl 代码更改为:

my $dbh = DBI->connect( "DBI:mysql:database=$js_db_name;host=$js_db_host",
                         $js_db_user, $js_db_pass, {'RaiseError' => 1,
                         mysql_enable_utf8 => 1, mysql_auto_reconnect => 0} );
Run Code Online (Sandbox Code Playgroud)

但警告仍然存在。我已尝试按照此处的建议添加reconnect=false[client]配置文件的部分。也没有成功。/etc/my.cnf

我什至尝试更改 MySQL 的 Perl DBI 驱动程序,其代码如下 ( mysql.pm):

    if ($this && ($ENV{MOD_PERL} || $ENV{GATEWAY_INTERFACE})) {
        $this->{mysql_auto_reconnect} = 1;
    }
Run Code Online (Sandbox Code Playgroud)

避免将mysql_auto_reconnect属性设置为1. 但这也行不通。可能还有额外的代码,但如果可能的话我会避免更改标准库。 …

mysql perl dbi

20
推荐指数
1
解决办法
2万
查看次数

使用Perlbrew时从crontab运行Perl脚本

我尝试了以下内容并发现它可以正常工作.这是由非特权用户完成的.首先找出perl命令的位置:

# which perl
Run Code Online (Sandbox Code Playgroud)

然后检查以下值PERL5LIB:

# echo $PERL5LIB
Run Code Online (Sandbox Code Playgroud)

然后,在用户的crontab文件中,执行以下操作:

MAILTO=<my email address for the jobs output>
HOME=/home/myhome
PERL5LIB=/home/myhome/perl5/lib/perl5

0 2 * * * $HOME/<rest of path to perl>/perl $HOME/<path to my perl script> arg1 ...
Run Code Online (Sandbox Code Playgroud)

这将在凌晨2点运行,似乎正确找到所有Perl库.我的问题是:这是完整和便携的吗?有没有更好的办法?

我已经看到了许多bashperl脚本,它们应该为执行Perl脚本准备环境,但这似乎就足够了.欢迎任何建议!

编辑:从评论到问题,似乎我使用Perlbrew和'的"坏"混合local::lib.这里回答了确保库安装在特定Perlbrew版本中的方法:如何在使用 perlbrew时安装CPAN模块?.双方cpancpanm会在安装PERL5LIB时,你正在使用local::lib,除非你明确地告诉他们不这样做.也cpanm似乎更适合一起工作Perlbrew.

perl cron perlbrew

7
推荐指数
1
解决办法
694
查看次数

将动态代码添加到 Perl 应用程序的最佳方法

我知道这个问题的具体实例之前已经得到回答:

Perl Monks 也有很好的答案:

但我想要一种强大的方法来向 Perl 应用程序添加功能,即:

  1. 高效:如果代码不需要,则不应编译。
  2. 易于调试:如果动态代码出现问题,则错误报告应该指向动态代码的正确位置。
  3. 易于扩展:添加新代码应该像添加新文件或目录+文件一样简单。
  4. 易于调用:主应用程序应该能够轻松使用“附加组件”。一个有效的机制来检查“附加”是否已经加载,如果没有加载,将是一个优点。

为了说明这一点,以下是一些可以从良好解决方案中受益的示例:

  • 一组从不同应用程序移动数据的脚本。例如,将数据从 OpenCart 移动到 Prestashop,其中数据模型中的每个实体都有一个处理输入或输出的特定“附加组件”;然后中间数据模型负责数据的转换。这可用于在任何方向甚至同一电子商务的不同版本之间移动数据。

  • 需要在不同位置呈现不同类型 HTML 的 Web 应用程序。每个“模块”都知道如何处理特定信息并接受参数来执行此操作。一个模块输出 HTML,另一个模块输出文档列表,另一个模块输出文档,另一个模块输出横幅,等等。

以下是我使用过并且有效的一些示例。

在运行时加载函数并输出可能的编译错误:

eval `cat $file_with_function`;
if( $@ ) {
  print STDERR $@, "\n";
  die "Errors at file $file_with_function\n";
}
Run Code Online (Sandbox Code Playgroud)

或者使用更强大的File::Slurp

eval read_file("$file_with_function", binmode => ':utf8');
Run Code Online (Sandbox Code Playgroud)

检查某个函数是否已定义:

if( !defined &myfunction ) {
  die "myfunction is not defined\n";
} …
Run Code Online (Sandbox Code Playgroud)

perl

5
推荐指数
1
解决办法
1393
查看次数

标签 统计

perl ×3

cron ×1

dbi ×1

mysql ×1

perlbrew ×1