Разница в окружающей среде делает меня подозрительным.Как и при выполнении заданий cron, может случиться так, что среда, путь INC или сам интерпретатор perl достаточно отличаются, что не может найти Crypt :: SSLeay или что-либо еще, что вы используете для поддержки SSL.
В качестве шага по устранению неполадок попробуйте использовать эту программу как в вашей оболочке, так и в хуке post-commit, чтобы увидеть, есть ли разница между ними.Это выведет несколько переменных времени выполнения, которые показывают, что perl знает о своей среде, в временный файл.
#!/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__
Если они существенно различаются, ваш следующий шаг - сделать среду в ловушке после фиксации такой же, какпод вашей оболочкой, например, добавив строку use lib qw( /path/to/where/ssl/modules/are/installed );
в раздел use
вашего скрипта, установив PERL5LIB
, используя полный путь к другому интерпретатору Perl или что-то еще подходящее.См. perldoc perlvar
для описания некоторых переменных, если вы не знакомы с ними.