我刚刚安装了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错误日志或其他一些日志文件中保存错误?
我使用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) 我有一个脚本(目前这里没有代码示例,但我使用了 IO::Async),它连接到远程服务器上的套接字并进行侦听。客户端通常只是监听新数据。
问题是客户端无法检测是否出现网络问题以及套接字连接是否消失。我使用了 IO::Async,也尝试了 IO::Socket。建立初始连接后,句柄始终处于“连接”状态。
如果再次建立网络连接,套接字连接自然仍然会丢失,因为脚本不知道它应该重新连接。
我正在考虑创建某种“keepAlive”,每隔 X 秒“ping”(syswrite)套接字(如果没有新内容通过套接字)以检查连接是否仍然存在。
这是正确的方法吗?还是有其他更有创意或更干净的解决方案?
我有守护程序脚本,它在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应用程序的.
是否有"最佳实践"方法来检查连接状态并在需要时重新连接?#
我可以在每个循环上准备语句,但这不是解决方案,而只是解决问题的方法.
perl ×4
connection ×1
curl ×1
dbd-pg ×1
fastcgi ×1
file-upload ×1
io ×1
libcurl ×1
networking ×1
nginx ×1
postgresql ×1
reconnect ×1
sockets ×1
spawn-fcgi ×1