【发布时间】:2013-09-24 10:12:45
【问题描述】:
我有一个小 perl 脚本,它尝试从 git 存储库中提取,然后从 git log 中获取一些东西:
use Git::Repository;
my $repo = Git::Repository->new(
git_dir => $git_path,
);
$repo->run('pull') || die $!;
my @commits = $repo->run(log);
...
对于身份验证,我有一个.netrc-文件,其中我的凭据位于/home/bla。当脚本从 shell 运行时,这非常有效。现在我尝试将此脚本用于 Web 应用程序:
my $evil_commits = `./list_commits.pl`;
当我这样做时,它会产生以下错误消息:
[Thu Sep 19 12:50:49 2013] [error] [client <>] fatal: Could not read password: No such device or address at ./list_commits.pl line 45
我已经尝试在 CGI 脚本中设置 $ENV{HOME} 但这没有帮助。关于我在这里缺少什么的任何建议?
【问题讨论】:
-
您的网络应用程序是否使用与
~/.netrc所在的用户帐户相同的用户帐户运行? -
不,但我无法想象这有什么不同,因为我将
$ENV{HOME}更改为正确的目录并且我没有收到permission denied的错误消息。即使.netrc文件上的chmod 777也不会改变任何东西。我很难想象这个错误与运行脚本的用户有关。 -
我会说,它确实有所作为。
-
您能否解释一下为什么这个确切的错误可能是由于用户不同而不是仅仅说明它“确实有所作为”而导致的?甚至可能提供“更改用户”以外的解决方案,因为这对我来说是不可能的,因为我没有机器上的管理权限。
-
我怀疑
curl库(最终由git pull调用)依赖netrc获取凭据在~/.netrc中查找它,而不是在$HOME/.netrc中查找它(和the two can be different)。不过,我现在还没有解决办法。
标签: git perl apache cgi .netrc