2012-03-29 19 views
1

シェルスクリプトを呼び出すruby cgiスクリプトがあります。シェルスクリプトがruby CGIスクリプトから正しく実行されない

シェルスクリプトはgit pullを実行します。

コマンドプロンプトからシェルスクリプトを実行すると機能します。

しかし、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>" 

とシェルスクリプトは次のとおりです:

Rubyスクリプトがある

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

両方のファイルが777

任意のアイデアをchmodしていますか?

答えて

-1

スクリプトの777を設定しても、それはカットされません。あなたのルビースクリプトがシェルスクリプトを実行するユーザを探してみてください。 gitは認証にSSH鍵を使用するので、通常はあなたのSSH鍵はあなただけが使うことができ、別のユーザがgit pullをしようとするとgit pullは失敗します。

シェルスクリプトを別のユーザーとして実行する方法については、thisを参照してください。

また、ターゲット環境のPATHが適切に設定され、アクセス可能であることを確認してください(Webサーバーを実行する場合はchroot)。これを行う

2

sudo sh -c cd /github 

はそのshコマンドの期間中、PWDを変更します。 ではなく、現在のシェルに影響を与えるのはです。同じサブシェルでcdとgit pullをする必要があります:

sudo sh -c 'cd /github && git pull origin master' 
関連する問題