如何使用Spacy将Rasa Bot部署到Heroku

时间:2018-06-19 18:23:19

标签: python heroku rasa-nlu

我使用Rasa NLU和Rasa Core制作了一个机器人。它连接到Node.js服务器和React.js前端。我运行此python脚本的方式是:

var PythonShell = require('python-shell');

var options = {
    mode: 'text',
    pythonOptions: ['-u'],
    scriptPath: './server/Rasa_Bot_Final'
};

var pyshell = new PythonShell('dialogue_management_model.py', options);


app.post('/message', (req, res) => {
    pyshell.on('message', function (message) {
        // received a message sent from the Python script (a simple "print" statement)
        res.end(message)
    });
    pyshell.send(req.body.messageFromUser);
})

这在我的本地主机上有效,但是,当部署到heroku时,出现此错误:

Error: OSError: [E050] Can't find model 'en'. It doesn't seem to be a shortcut link, a Python package or a valid path to a data directory.

这是因为我无法运行:

python -m spacy download en_core_web_md
python -m spacy link en_core_web_md en

在heroku上。

有人可以帮我解决这个问题吗?

我引用了这些: https://spacy.io/usage/

https://github.com/explosion/spaCy/issues/1099

2 个答案:

答案 0 :(得分:2)

确保在要求中添加了空格,并添加了包含python命令的Procfile。

请参阅:Doc for Procfile

Procfile 中:

web: python -m spacy download en_core_web_md && python -m spacy link en_core_web_md en

如果是由于无法运行python代码而引起的,则可能是由于无法识别您的代码并相应地设置所有内容的dyno导致的。

您应该检查一下,我认为这就是heroku所说的buildpack

答案 1 :(得分:0)

首先,请确保您的项目名称和Heroku应用程序的名称完全匹配。

以下对我有用:

Requirements.txt

flask
click
gunicorn==19.9.0
requests==2.21.0
spacy==2.0.11
sklearn-crfsuite==0.3.6
rasa-nlu==0.13.2
rasa-core==0.11.1
rasa-core-sdk==0.11.0

================================================ ==========

Procfile(假设您在app.py中定义了应用,路线等

web gunicorn app:app setup.wsgi --log-file -

================================================ =========

下载spaCy en模型:

然后在您的终端上登录到您的Heroku帐户:

$ heroku run bash -a rec-bot
$ python -m spacy download en