小编tok*_*tok的帖子

如何在nginx错误日志中获取perl脚本错误(Nginx with FCGIwrap)

我刚刚安装了fcgiwrap和spawn-fcgi,以便能够在nginx中使用perl脚本.我在我的网站配置中添加了这样的内容:

location ~ \.pl$ {
    gzip off;
    fastcgi_pass unix:/var/run/fcgiwrap.socket;
    include fastcgi_params;
    fastcgi_index index.pl;
}
Run Code Online (Sandbox Code Playgroud)

如果perl代码中存在错误,浏览器会显示以下消息:

An error occurred while reading CGI reply (no response received)
Run Code Online (Sandbox Code Playgroud)

而且我无法在nginx日志中找到perl错误.如果存在perl编译错误,命令行上的"perl -c"会有所帮助,但它不能帮助我解决运行时错误.

如何告诉perl或fcgiwrap在nginx错误日志或其他一些日志文件中保存错误?

error-handling perl fastcgi nginx spawn-fcgi

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

www :: curl - 如何上传(发布)大文件

我使用WWW :: Curl上传文件:

use WWW::Curl::Easy 4.14;
use WWW::Curl::Form;

my $url = 'http://example.com/backups/?sid=12313qwed323';
my $params = {
    name => 'upload',
    action => 'keep',
    backup1 => [ '/tmp/backup1.zip' ],   # 1st file for upload
};

my $form = WWW::Curl::Form->new();
foreach my $k (keys %{$params}) {
    if (ref $params->{$k}) {
        $form->formaddfile(@{$params->{$k}}[0], $k, 'multipart/form-data');
    } else {
        $form->formadd($k, $params->{$k});
    }
}

my $curl = WWW::Curl::Easy->new() or die $!; 
$curl->setopt(CURLOPT_HTTPPOST, $form);
$curl->setopt(CURLOPT_URL, $url);

my $body;   
$curl->setopt(CURLOPT_WRITEDATA, \$body);
my $retcode = $curl->perform();
my $response_code = $curl->getinfo(CURLINFO_HTTP_CODE); …
Run Code Online (Sandbox Code Playgroud)

perl curl file-upload libcurl

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

如何检测套接字连接何时丢失?

我有一个脚本(目前这里没有代码示例,但我使用了 IO::Async),它连接到远程服务器上的套接字并进行侦听。客户端通常只是监听新数据。

问题是客户端无法检测是否出现网络问题以及套接字连接是否消失。我使用了 IO::Async,也尝试了 IO::Socket。建立初始连接后,句柄始终处于“连接”状态。

如果再次建立网络连接,套接字连接自然仍然会丢失,因为脚本不知道它应该重新连接。

我正在考虑创建某种“keepAlive”,每隔 X 秒“ping”(syswrite)套接字(如果没有新内容通过套接字)以检查连接是否仍然存在。

这是正确的方法吗?还是有其他更有创意或更干净的解决方案?

sockets io perl networking

4
推荐指数
1
解决办法
2436
查看次数

如何确保DB(Postgres)连接在准备和执行之间仍然存在?

我有守护程序脚本,它在while循环中永远运行.我有一个准备好的语句,这个语句在每个循环上执行.

例:

  my $dbh;
  sub get_dbh {
      return DBI->connect(...);
  }

  my $dbh = get_dbh();
  my $sth = $dbh->prepare("SELECT ....") or die $DBI::errstr;

  while (1) {
      // is connection still there??
      //if (!$dbh->ping) {
      //    $dbh = get_dbh();
      //}

      $sth->execute('param1');

      // do some other things ... sleep between 0 and 3600
  }
Run Code Online (Sandbox Code Playgroud)

如果准备好的声明是在几小时前准备的,则会出现(或可能发生)问题.连接可能会死,我的执行也会死.在每次执行之前检查$ dbh-> ping看起来像是一种过度杀伤.

MySQL支持mysql_auto_reconnect,它确实有效.DBD :: Pg没有类似的东西.我读到了关于DBI :: Apache但我认为它依赖于mod_perl等.它显然是针对Web应用程序的.

是否有"最佳实践"方法来检查连接状态并在需要时重新连接?#

我可以在每个循环上准备语句,但这不是解决方案,而只是解决问题的方法.

postgresql connection perl reconnect dbd-pg

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