我有一个来自Github的git pull web hook,两个遥控器,GoDaddy [生产]和Bluehost [staging]。这个问题不是关于那些公司本身,而是可能是设置差异的原因。我有这个脚本,我在github.com上设置了一个post commit hook:
<?php
$output = shell_exec('git pull origin master');
echo "<pre>$output</pre>";
?>
当我提交Github回购时,钩子会在Bluehost上启动并正常工作。它对Godaddy没有任何作用。
Bluehost浏览器响应:
"already up to date". Pull command works, and the Bluehost repo is updated.
Godaddy浏览器响应:
<pre></pre> Pull command has not worked. Repo not updated.
当我通过浏览器运行此脚本时:
<?php
$output = shell_exec('ls');
echo "<pre>$output</pre>";
?>
我在两台服务器上都获得了正确的'ls'目录输出。
当我通过SSH进入目录时,我可以手动发出命令'git pull origin master',它可以在两台服务器上运行。那么这只是意味着Godaddy允许PHP发出一些命令,而不是其他命令吗?我能以某种方式修复此问题吗?没有人会自动部署到Godaddy中,这是不正确的!
答案 0 :(得分:8)
这可能类似于previous case,其中:
Godaddy技术支持证实 php无法在共享托管环境中访问git命令。
他们说实现这一目标需要VPS。
This comment确认共享服务器上的php设置(您可以配置)非常有限。
如果您的设置属于这种情况,请查看Godaddy支持。
答案 1 :(得分:1)
我遇到了类似的问题:我正在运行的命令:
$output = shell_exec('git pull origin master');
会返回一个空白字符串,但其他 git 命令则不会。通过在shell命令的末尾添加2&gt;&amp; 1来解决这个问题:
$output = shell_exec('git pull origin master 2>&1');
这会将STDERR输出重定向到STDOUT,我发现git抛出了一个我看不到的错误。