Сбой приложения NodeJS на Heroku при получении данных из сценария python - PullRequest
1 голос
/ 09 марта 2020

У меня есть приложение nodeJS, которое отлично работает на localhost, часть этого приложения NodeJS должна запускать сценарий python, который возвращает данные с использованием SYS. Когда я загружаю его в Heroku, происходит сбой при запуске сценария python. Поскольку я запускаю приложение узла напрямую, а не python, трудно получить сообщение об ошибке напрямую. Вместо этого я поместил try и исключая сообщения повсюду и напечатал сообщения, чтобы вернуться к python (например, сделал это в раздел конвертирования сообщений) и обнаружил, что это 2 из импорта в верхней части файла, который вызывает код python cra sh.

import sys
import spacy
import nltk

Если я ставлю попытку после sys, кажется, что она не падает на sys. Вместо этого это spacy и NLTK, который вызывает проблемы.

После некоторого поиска в Google я обнаружил, что для установки нужно использовать require.txt, как если бы я использовал Pip.

Так что в файле require.txt у меня есть

spacy
nltk

( Сначала я пытался использовать его с номерами версий, но это не помогло)

Однако, это по-прежнему не решает проблему. Я немного растерялся, как решить эту проблему. Неправильно ли я помещаю в файл require.txt или, возможно, heroku не запускает требования, когда сначала запускается приложение nodeJS вместо файла python?

Я впервые использую Heroku, поэтому извиняюсь за очевидность того, что я делаю неправильно.

Спасибо

Правка, включая фотографию журналов:

На фото моих логов написано, что ошибка R14 Превышена квота памяти, я предполагаю, что это потому, что JS ожидает ответа от python, который никогда не приходит

Logs when launching through terminal: part 1

part 2

1 Ответ

0 голосов
/ 09 марта 2020

Согласуйте свою среду разработки с производственной средой (и наоборот). Убедитесь, что производственная среда (Heroku) поддерживает ваши версии.

Узнайте здесь о том, какие версии поддерживаются Python:
https://devcenter.heroku.com/articles/python-support#supported -runtimes

Затем вы можете заблокировать эту версию, указав runtime.txt:
https://devcenter.heroku.com/articles/python-runtimes

После того, как вы убедились, что вы используете одну и ту же версию Python с обеих сторон, получите копию из ваших установленных библиотек.

python3 -m pip freeze > requirements.txt

Это запишет все ваши установленные Python библиотеки в requirements.txt. Я использовал python3, но для вас он может называться python, py или py3.

Важно указать Python runtime.txt, поскольку последняя версия Python ( 3.8 и выше) не поддерживает ntlk, см .: https://pypi.org/project/nltk/

Наконец, явно укажите необходимые пакеты сборки Heroku через app.json:
https://devcenter.heroku.com/articles/app-json-schema

"buildpacks": [
  {
    "url": "https://github.com/heroku/heroku-buildpack-java"
  },
  {
    "url": "https://github.com/heroku/heroku-buildpack-python"
  }
]
...