2012-03-29 230 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'