我有一个Perl程序,旨在从subversion post-commit
脚本运行,该脚本需要连接到基于HTTPS的Web API。
当我以交互式shell的形式测试程序时,它的工作正常。
当它从post-commit
脚本运行时,它会出错,LWP的响应就是“500 Connect failed”。
有一些证据表明,从post-commit
脚本运行时,SS未启用,因为当我设置$ENV{HTTPS_DEBUG} =1;
并以root身份运行时,我会看到调试输出,例如
SSL_connect:before / connect initialization
但是从post-commit
脚本中打印出非SLL调试信息。
post-commit
脚本以用户apache
运行。自从我完成任何Unix工作已经有好几年了,所以我不确定在这种情况下让SSL工作的下一步是什么。
答案 0 :(得分:2)
环境的差异让我怀疑。与运行cron作业一样,环境,INC路径或perl解释器本身可能完全不同,无法找到Crypt :: SSLeay或您用于SSL支持的任何其他内容。
作为故障排除步骤,请尝试在shell和post-commit挂钩中使用此程序,以查看两者之间是否存在环境差异。这将转储几个运行时变量,这些变量显示perl对tempfile的了解情况。
#!/usr/bin/perl
use Data::Dumper;
use File::Temp qw( tempfile );
use strict;
use warnings;
my $tempdir = '/tmp'; # Change this if necessary.
my( $fh, $fname ) = tempfile( "tempXXXXXX", DIR => $tempdir, UNLINK => 0 );
print $fh Data::Dumper->Dump( [ \@INC, \%INC, $^X, $0, $], \@ARGV, \%ENV ],
[ qw( @INC %INC ^X 0 ] @ARGV %ENV ] ) ] );
close( $fh );
# Change this if the post-commit hook doesn't pass stdout back to you.
print "Wrote data to $fname.\n";
__END__
如果它们大不相同,那么下一步就是使后提交挂钩中的环境与shell下的环境相同,例如:通过设置use lib qw( /path/to/where/ssl/modules/are/installed );
,使用指向其他Perl解释器的完整路径或任何适当的内容,在脚本的use
部分添加PERL5LIB
行。如果您不熟悉某些变量的说明,请参阅perldoc perlvar
。
答案 1 :(得分:0)
这不是Perl问题。 Perl只做它所说的。弄清楚在Perl上面说什么是“http:”vs“https:”,然后对其进行排序。您不需要“配置Perl ...以使用SSL”。
答案 2 :(得分:0)
我不得不这样做:
setsebool httpd_can_network_connect=on
允许httpd进程建立网络连接