2012-03-29 177 views
1

我有一个ruby cgi脚本,它调用一个shell脚本。shell脚本不能正确执行从ruby CGI脚本

shell脚本会执行git pull。

当我从命令提示符运行shell脚本它的作品。

但是,当我从ruby cgi脚本运行它时,它会执行脚本,但git pull不会发生。

我猜它可能与权限相关,但我无法完全解决如何解决它。

红宝石脚本是:

#!/usr/local/rvm/rubies/ruby-1.9.3-p125/bin/ruby 
require "cgi" 
git_pull = `sh /github/do_git_pull.sh` 
move_apanels = `sh /github/move_apanels.sh` 

puts "Content-type: text/html\n\n" 
puts "<html><body>We've done the following:<ul>" 
puts "<li>#{git_pull.to_s}</li>" 
puts "<li>#{move_apanels.to_s}</li>" 
puts "</ul></body></html>" 

,而shell脚本是:

#!/bin/bash 
sudo sh -c cd /github 
sudo sh -c git pull origin master 
echo "Git Pull Completed" 

两个文件都搭配chmod 777

任何想法?

回答

-1

在脚本上设置777不会削减它。试着找出你的ruby脚本在哪个用户下执行shell脚本。由于git使用SSH密钥进行身份验证,并且通常您的SSH密钥只能由您使用,因此如果其他用户尝试执行git pull,git pull将会失败。

检出this有关如何以不同用户身份运行shell脚本的问题。

还要确保在目标环境中的PATH设置正确且可访问(如果您运行chroot的Web服务器)。

2

这样做:

sudo sh -c cd /github 

只更改为sh命令的持续时间PWD。它确实不是影响当前shell。你需要cd和git拉在同一个子shell中:

sudo sh -c 'cd /github && git pull origin master'