У меня были реальные проблемы при попытке запустить скрипт ruby через Java.У меня были предложены всевозможные решения, и все они почему-то терпят неудачу, поэтому я пытаюсь упростить мою проблему.
Допустим, у меня есть сценарий оболочки, в котором есть только эта строка:
ruby -rubygems script/test_s2t.rb
На терминале я могу запустить этот скрипт, используя script/runruby.sh
, и он работает как положено.Теперь предположим, что у меня есть метод Java, который выполняет следующие действия:
String[] cmd = {"script/runruby.sh"};
ProcessBuilder builder = new ProcessBuilder(cmd);
builder.redirectErrorStream(true);
Process process = builder.start();
Это не работает (в частности, он возвращает ошибку из сценария Ruby, но это ошибочное направление, потому что оно действительно сводится ксам скрипт не работает должным образом).Мой вопрос не в том, почему этот сценарий test_s2t.rb
не работает, потому что я думаю, что это может отвлекать меня от реальной проблемы.
Мой вопрос просто , что отличается, когда я запускаю что-то через ProcessBuilderв отличие от простого запуска через командную строку .Это проблема с разрешениями?Различия в пути?Должно быть что-то извилистое в среде, в которой запускается скрипт, потому что я не вижу проблемы с самим скриптом.
Как и всегда, любые предложения приветствуются.Три дня, и я рассчитываю на эту проблему ...
РЕДАКТИРОВАТЬ - Для любопытных точная ошибка, которую я получаю в Java, описана в нижней части этого вопроса: Java получает ошибку при выполнении сценария Ruby;Терминал не
Результат, который мы получили в этом вопросе, состоял в том, что я должен попробовать JRuby, но это привело к дальнейшим проблемам, так как я не могу заставить гем работать должным образом в JRuby.Поэтому я снова спросил себя, почему он не работает нормально.
Причина, по которой я считаю, что ошибка отвлекает, заключается в том, что ошибка дается просто потому, что она обработала строку, которой не былоожидая увидеть.Ожидаемая строка - это обычный процесс, который запускает скрипт, использующий ffmpeg и подобные.Это означает, что скрипт столкнулся с другой ошибкой (которую он не показывает, что означает, что он, вероятно, был вызван не ruby / jruby, а процессами, которые скрипт запускает как ffmpeg).
Это невероятно расстраивает,только потому, что он отлично работает из командной строки.