Сценарий оболочки не выполняется должным образом из сценария ruby ​​CGI - PullRequest
1 голос
/ 29 марта 2012

У меня есть скрипт ruby ​​cgi, который вызывает скрипт оболочки.

Сценарий оболочки выполняет git pull.

Когда я запускаю сценарий оболочки из командной строки, он работает.

Но когда я запускаю его из скрипта 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>"

И скрипт оболочки:

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

Оба файла имеют chmod 777

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 29 марта 2012

Делая это:

sudo sh -c cd /github

изменяет PWD только на время выполнения этой команды sh. не влияет на текущую оболочку.Вы должны сделать cd и git pull в одной и той же оболочке:

sudo sh -c 'cd /github && git pull origin master'
0 голосов
/ 29 марта 2012

Установка 777 в ваших скриптах не приведет к его сокращению.Попробуйте найти пользователя, под которым ваш скрипт ruby ​​выполняет скрипт оболочки.Поскольку git использует SSH-ключи для аутентификации, и обычно ваши SSH-ключи могут использоваться только вами, git pull не будет работать, если другой пользователь попытается выполнить git pull.о том, как запускать сценарий оболочки от имени другого пользователя.

Также убедитесь, что PATH в целевой среде задано правильно и доступно (если вы запускаете веб-сервер chrooted).

...