[Heroku上运行的NodeJS应用程序从python脚本获取数据时失败

问题描述 投票:1回答:1

我有一个在本地主机上完美运行的nodeJS应用程序,该NodeJS应用程序的一部分必须运行python脚本,该脚本使用SYS返回数据。当我将其上传到Heroku时,运行python脚本时失败。由于我是直接运行节点应用程序,而不是python,因此很难直接获得错误消息。相反,我到处都放置了try和except消息,并打印了消息以返回python(例如,将其传递到convert message部分),并发现文件顶部的导入中有2个导致python代码崩溃。

import sys
import spacy
import nltk

如果我在sys之后进行尝试,看来它没有在sys上崩溃。相反,正是spacy和nltk导致了问题。

经过一番谷歌搜索后,我发现必须像使用Pip一样使用requirements.txt进行安装。

所以在requirements.txt中,我有

spacy
nltk

((我最初尝试将其与版本号一起使用,但失败了)

但是,这仍然不能解决问题。我对如何解决这个问题有些迷茫。我是否将错误的内容放到Requirements.txt中,或者当首先运行nodeJS应用而不是python文件时,heroku不能运行需求?

这是我第一次使用Heroku,因此如果我做错的事情很明显,我会道歉。

谢谢

编辑,包括日志照片:

Photo of my logs,it says error R14 memory quota exceeded, I am assuming this is because JS is awaiting a reply from python which never comes

Logs when launching through terminal: part 1

part 2

javascript python node.js heroku sys
1个回答
0
投票

将开发环境与生产环境相匹配(反之亦然)。确保生产环境(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,但对您来说它可能称为pythonpypy3

指定Python runtime.txt很重要,因为最新的Python版本(3.8和更高版本)不支持ntlk,请参阅:https://pypi.org/project/nltk/

最后通过app.json明确指定所需的Heroku构建包: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"
  }
]
© www.soinside.com 2019 - 2024. All rights reserved.