Решение нескольких проблем с flask и октавой - PullRequest
1 голос
/ 18 июня 2020

Я пытаюсь запустить приложение flask, которое использует октаву и пакет python oct2py для связи с Octave. Я устанавливаю python venv и запускаю приложение.

Простое flask приложение, похоже, работает нормально, поскольку оно принимает запросы на публикацию и отвечает на них. Когда я пытаюсь добавить функцию октавы, приложение работает нормально. С прямым связыванием «пулемет» приложение тоже работает нормально.

Проблема начинается, когда я пытаюсь создать файл модуля systemd service, а код запускается в октаве.

Я создал такую ​​службу, как /etc/systemd/system/my_project.service, и ее содержимое показано ниже.

[Unit]
Description=Gunicorn instance to serve flask app
After=network.target

[Service]
User=some_user
Group=www-data
WorkingDirectory=/home/some_user/project_dir
Environment="PATH=/home/some_user/project_dir/venv/bin"
ExecStart=/home/some_user/project_dir/venv/bin/gunicorn --workers 3 --bind unix:project_dir.sock -m 007 wsgi:app

[Install]
WantedBy=multi-user.target

После просмотра статуса выдается ошибка, например

Журнал ошибок

После перезапуска службы выдает

gunicorn[1690]:     self.restart()
gunicorn[1690]:   File "/home/some_user/project_dir/venv/lib/python3.8/site-packages/oc>
gunicorn[1690]:     self._engine = OctaveEngine(stdin_handler=self._handle_stdin,
gunicorn[1690]:   File "/home/some_user/project_dir/venv/lib/python3.8/site-packages/oc>
gunicorn[1690]:     self.executable = self._get_executable()
gunicorn[1690]:   File "/home/some_user/project_dir/venv/lib/python3.8/site-packages/oc>
gunicorn[1690]:     raise OSError('octave-cli not found, please see README')
gunicorn[1690]: OSError: octave-cli not found, please see README
systemd[1]: my_project.service: Main process exited, code=exited, status=1/FAILURE
systemd[1]: my_project.service: Failed with result 'exit-code'.

Я искал во многих местах ошибку, но не смог ее устранить, например здесь здесь

И для октавы я попытался запустить octave и octave-cli с терминала с активным venv и без него, и он открывает октаву, поэтому я не могу определить точную причину.

Если я напрямую запустите команду на терминале, приложение запускается без ошибок.

gunicorn --bind 127.1.0.1:5000 wsgi:app

Файл wsgi.py выглядит так

from my_project import app

if __name__ == "__main__":
    app.run()

Есть предложения, как решить эту проблему?

...