Shell脚本无法从ruby CGI脚本正确执行

时间:2012-03-29 11:42:49

标签: ruby bash shell cgi

我有一个调用shell脚本的ruby cgi脚本。

shell脚本执行git pull。

当我从命令提示符运行shell脚本时,它可以工作。

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

我猜它可能与权限相关但我无法解决如何修复它。

ruby​​脚本是:

#!/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

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

这样做:

sudo sh -c cd /github

仅在sh命令的持续时间内更改PWD。 会影响当前的shell。你需要cd和git pull in相同的子shell:

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

答案 1 :(得分:-1)

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

查看this有关如何以其他用户身份运行shell脚本的问题。

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