Запуск скрипта Python из приложения Java / Kotlin на Heroku - PullRequest
0 голосов
/ 15 сентября 2018

У меня есть приложение Java / Kotlin, которое запускает скрипт Python каждый раз, когда пользователь делает запрос.

Это хорошо работает на моем ноутбуке и любом другом VPS.Но я не мог заставить это работать на Heroku.Он не работает и ничего не печатает.

Вот соответствующий код:

val command = "python3 $s/assets/script.py $params"
println("Command: $command")
val process = Runtime.getRuntime().exec(command)
process.waitFor()
val reader = BufferedReader(InputStreamReader(process.inputStream))
val message = reader.lines().collect(Collectors.joining("\n"))
println(message)

Почему это не работает на Heroku?

1 Ответ

0 голосов
/ 16 сентября 2018

Heroku для создания приложений на основе buildpacks . Каждый buildpack-пакет знает, как создать определенный проект, например, один может знать, как устанавливать зависимости Maven и компилировать исходный код Kotlin, а другой может знать, как устанавливать гемы Ruby.

В простых случаях разработчикам не нужно слишком беспокоиться об этом. Когда пакет сборки явно не запрашивается, Heroku пытается определить, какой пакет сборки следует использовать . По сути, он перебирает официально поддерживаемые пакеты сборки в заданном порядке и использует скрипт обнаружения каждого пакета сборки , чтобы посмотреть, соответствует ли проект этому пакету сборки.

Как только он находит соответствующий пакет сборки, он перестает искать. В простых случаях этого часто достаточно. Но каждый buildpack предназначен для генерации довольно скудного изображения; инструменты, которые вы могли бы ожидать в обычной Linux-системе, не обязательно будут присутствовать. В частности, пакет сборки Java / Kotlin не даст вам двоичный файл python.

Хорошей новостью является то, что с небольшим количеством конфигурации вы можете использовать несколько пакетов сборки .

  1. Сначала установите основной пакет сборки: heroku buildpacks:set heroku/java
  2. Затем добавьте ваш вторичный пакет сборки: heroku buildpacks:add --index 1 heroku/python
  3. Убедитесь, что ваши пакеты сборки показаны в правильном порядке (сначала Python, затем Java), используя heroku buildpacks

    Последний пакет сборки в списке будет использоваться для определения типов процессов для приложения. Любые типы процессов, определенные в более ранних сборках, будут игнорироваться.

  4. Наконец, вам может понадобиться добавить пустой файл requirements.txt, чтобы предотвратить сбой сборки пакета Python. Кроме того, вы можете добавить любые зависимости Python, которые у вас могут быть.

    Если у вас есть зависимости Python, рассмотрите возможность использования Pipfile и Pipfile.lock вместо requirements.txt. Это приведет к тому, что ваше приложение будет построено с использованием pipenv вместо pip.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...