Развертывание приложения Node.js, которое использует python-shell для Heroku - PullRequest
0 голосов
/ 11 апреля 2019

У меня есть приложение node.js, которое разворачивается на heroku и работает хорошо (есть простой Procfile с надписью web: npm start.

У меня есть и пакеты node.js, и пакеты сборки Python.

У меня для переменной конфигурации PYTHONPATH установлено значение /usr/bin/python.

У меня есть requirements.txt в домашнем каталоге моего приложения, в котором указан материал, который мне нужен (я даже включил последнюю версию gunicorn).

Однако, когда приходит время вызывать оболочку python, я получаю следующее:

2019-04-11T02:46:14.680872+00:00 app[web.1]: { Error: ImportError: No module named site
2019-04-11T02:46:14.680933+00:00 app[web.1]: 
2019-04-11T02:46:14.680937+00:00 app[web.1]:     at PythonShell.parseError (/app/node_modules/python-shell/index.js:254:21)
2019-04-11T02:46:14.680939+00:00 app[web.1]:     at terminateIfNeeded (/app/node_modules/python-shell/index.js:129:32)
2019-04-11T02:46:14.680941+00:00 app[web.1]:     at ChildProcess.<anonymous> (/app/node_modules/python-shell/index.js:121:13)
2019-04-11T02:46:14.680942+00:00 app[web.1]:     at ChildProcess.emit (events.js:189:13)
2019-04-11T02:46:14.680944+00:00 app[web.1]:     at Process.ChildProcess._handle.onexit (internal/child_process.js:248:12)
2019-04-11T02:46:14.680945+00:00 app[web.1]:   executable: '/usr/bin/python',
2019-04-11T02:46:14.680947+00:00 app[web.1]:   options: [ '-u' ],
2019-04-11T02:46:14.680949+00:00 app[web.1]:   script: '/app/routes/resgraph.py',
2019-04-11T02:46:14.680950+00:00 app[web.1]:   args: [ '2', 'ribozyme', 'hatchet' ],
2019-04-11T02:46:14.680952+00:00 app[web.1]:   exitCode: 1 }
2019-04-11T02:46:14.681384+00:00 app[web.1]: results: undefined

В основном, тогда остальная часть моего приложения перестает работать, так как мне нужно определить results.

Почему это происходит? Кажется, работает нормально на моем компьютере, когда я использую свои локальные пути.

Это часть кода, которая вызывает оболочку python:

/* returns graph information for a certain query. */
router.get('/', function(req, response, next) {

    // get the query string
    query_string = req.query.query;
    let options = {
      mode: 'text',
      pythonPath: process.env.PYTHONPATH,
      pythonOptions: ['-u'], // get print results in real-time
      scriptPath: '/app/routes',
      args: [req.query.depth].concat(query_string.split(' '))
    };

    PythonShell.run('/resgraph.py', options, function (err, results) {
      if (err) console.log(err);
      // results is an array consisting of messages collected during execution
      console.log('results: %j', results);
      response.json(JSON.parse(results[1]));
    });

});

1 Ответ

1 голос
/ 11 апреля 2019

Вы должны сказать героку, что вам нужно использовать python в вашем проекте.

  1. Сначала добавьте пакеты сборки для узла js & python.
    heroku buildpacks:add --index 1 heroku/nodejs
    heroku buildpacks:add --index 2 heroku/python
    
  2. Далее отредактируйте Procfile на
    pipinstall: pip install -r requirements.txt
    web: npm start
    
  3. Теперь подтолкни к героку.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...