2015-11-30 4 views
1

У меня есть веб-приложение, написанное на Go и развернутое на Heroku. Недавно я внедрил новую функцию, которая должна запускать файл сценария bash и извлекать его вывод. Используемая мной команда:Запустить файл сценария bash в Heroku программно

out, err := exec.Command("bash", script_path, arg).Output() 

Где script_path - это абсолютный путь к скрипту. (который строится динамически с использованием пути файла вызова). Аргумент - это вход в скрипт.

Эта команда отлично работает в моей локальной машине, но не в Heroku:

18:51:40 HTTP: паника выступающей 10.238.8.204:17763: статус выхода 127

пс: Если Я запускаю ту же команду «heroku run bash», это работает.

Любые мысли?

+0

Вы фиксированной вы выдаете? – egeloen

+0

Да. Он работает с полным путем к исполняемому файлу bash: out, err: = exec.Command ("/ bin/bash", script_path, arg) .Output() – Marcelo

+0

Итак, я должен сделать что-то не так на моей стороне! Благодарим за отзыв и подтверждаем, что это возможно! – egeloen

ответ

1

Код возврата оболочки 127 означает обозначение «Команда не найдена».

Вы можете увидеть это поведение в этом маленьком примере.

$ nonesuch 
-bash: nonesuch: command not found 
$ echo $? 
127 

Такого рода вопрос, как правило, означает, что вам нужно добавить

/full/path/to/myscriptdir 

к PATH окр вар. то есть

export PATH="$PATH:/full/path/to/myscriptdir withSpaces" 

Существует несколько мест, которые могут быть выполнены, но это зависит от ваших правил организации для таких вещей.

Для немедленного устранения возникшей проблемы добавьте файл $HOME/.profile идентификатора пользователя, который запускает Heroku ИЛИ, скорее всего, файл конфигурации Heroku, к которому он может быть добавлен. (У меня нет опыта w Heroku).

Интересно, что в этой статье Heroku config files не упоминается переменная PATH.


Как вы обнаружили, вы можете изменить свой код, чтобы включить полный путь непосредственно, т.е.

out, err := exec.Command("/bin/bash", path.Join(".", "src", "ext", "dextenso.sh"), 

IHTH

+0

Привет Укрытие, вы ответили мне, чтобы найти решение, но эти шаги с переменной PATH не были необходимы. Мне просто нужно было указать полный путь к исполняемому файлу bash и моему сценарию. Например: 'out, err: = exec.Command ("/bin/bash ", path.Join (". "," Src "," ext "," dextenso.sh "), arg) .Output()' , Не могли бы вы отредактировать свой ответ, чтобы я мог отметить его как решение? благодаря! – Marcelo

+0

@marcelo: Привет, хорошо, я сделал это. Я рад, что это помогло! – shellter

Смежные вопросы