【问题标题】:Issue Running gunicorn to serve flask app问题运行 gunicorn 以服务于烧瓶应用程序
【发布时间】:2019-08-26 15:08:09
【问题描述】:

目标:让 gunicorn 服务于烧瓶应用

尝试:运行以下命令:

gunicorn [the name of my project folder]:flaskr

输出:

[2019-08-26 15:04:32 +0000] [16063] [INFO] Starting gunicorn 19.9.0
[2019-08-26 15:04:32 +0000] [16063] [INFO] Listening at: http://127.0.0.1:8000 (16063)
[2019-08-26 15:04:32 +0000] [16063] [INFO] Using worker: sync
[2019-08-26 15:04:32 +0000] [16067] [INFO] Booting worker with pid: 16067
[2019-08-26 15:04:32 +0000] [16067] [ERROR] Exception in worker process
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/arbiter.py", line 583, in spawn_worker
    worker.init_process()
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/workers/base.py", line 129, in init_process
    self.load_wsgi()
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/workers/base.py", line 138, in load_wsgi
    self.wsgi = self.app.wsgi()
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/base.py", line 67, in wsgi
    self.callable = self.load()
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/wsgiapp.py", line 52, in load
    return self.load_wsgiapp()
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/wsgiapp.py", line 41, in load_wsgiapp
    return util.import_app(self.app_uri)
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/util.py", line 350, in import_app
    __import__(module)
ImportError: No module named [the name of my project folder]
[2019-08-26 15:04:32 +0000] [16067] [INFO] Worker exiting (pid: 16067)
[2019-08-26 15:04:32 +0000] [16063] [INFO] Shutting down: Master
[2019-08-26 15:04:32 +0000] [16063] [INFO] Reason: Worker failed to boot.

我已将此项目部署到我的 Web 服务器。在我用来管理这个网络服务器的帐户的主目录中,我有一个项目文件夹,因为我正在从我的工作站上处理它。这是从项目文件夹中运行的树输出:

├── flaskr
│   ├── auth.py
│   ├── build
│   ├── db.py
│   ├── db.pyc
│   ├── dist
│   ├── flaskr.egg-info
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── MANIFEST.in
│   ├── old
│   ├── __pycache__
│   ├── schema.sql
│   ├── setup.py
│   ├── static
│   └── templates
├── instance
│   └── flaskr.sqlite
├── keys.csv
├── tests
├── venv
│   ├── bin
│   ├── include
│   ├── lib
│   ├── lib64
│   ├── pyvenv.cfg
│   └── share
└── venv.sh

我已经在 venv 中安装了 gunicorn。我还导出了烧瓶教程中所示的环境变量。

我还配置了 manifest.ini 和 setup.py 以使程序可安装。我试图通过在项目文件夹中运行以下命令来安装:

pip install -e

我得到以下输出:

Usage:   
  pip install [options] <requirement specifier> [package-index-options] ...
  pip install [options] -r <requirements file> [package-index-options] ...
  pip install [options] [-e] <vcs project url> ...
  pip install [options] [-e] <local project path> ...
  pip install [options] <archive url/path> ...

-e option requires an argument

使用“flask run”后,我已验证应用程序本身正在我的工作站上运行。

如果您需要任何文件的代码,请告诉我以及最佳共享方式。下面是一些我认为目前相关的代码:

setup.py:

from setuptools import find_packages, setup

setup(
    name='flaskr',
    version='1.0.0',
    packages=find_packages(),
    include_package_data=True,
    zip_safe=False,
    install_requires=[
        'flask',
    ],
)

manifest.in:

include flaskr/schema.sql
graft flaskr/static
graft flaskr/templates
global-exclude *.pyc

编辑:2019 年 8 月 26 日 - 下午 1:30:

我已尝试通过关注另一篇文章https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-gunicorn-and-nginx-on-ubuntu-14-04 来发现此问题的原因 当我运行这个命令时:

gunicorn --bind 0.0.0.0:8000 wsgi

输出:

[2019-08-26 17:23:14 +0000] [17748] [INFO] Starting gunicorn 19.9.0
[2019-08-26 17:23:14 +0000] [17748] [INFO] Listening at: http://0.0.0.0:8000 (17748)
[2019-08-26 17:23:14 +0000] [17748] [INFO] Using worker: sync
[2019-08-26 17:23:14 +0000] [17752] [INFO] Booting worker with pid: 17752
[2019-08-26 17:23:15 +0000] [17752] [ERROR] Exception in worker process
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/arbiter.py", line 583, in spawn_worker
    worker.init_process()
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/workers/base.py", line 129, in init_process
    self.load_wsgi()
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/workers/base.py", line 138, in load_wsgi
    self.wsgi = self.app.wsgi()
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/base.py", line 67, in wsgi
    self.callable = self.load()
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/wsgiapp.py", line 52, in load
    return self.load_wsgiapp()
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/wsgiapp.py", line 41, in load_wsgiapp
    return util.import_app(self.app_uri)
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/util.py", line 350, in import_app
    __import__(module)
  File "/home/[my user name]/[name of the project folder]/wsgi.py", line 1, in <module>
    from [name of the project folder] import app
ImportError: No module named [name of the project folder]
[2019-08-26 17:23:15 +0000] [17752] [INFO] Worker exiting (pid: 17752)
[2019-08-26 17:23:15 +0000] [17748] [INFO] Shutting down: Master
[2019-08-26 17:23:15 +0000] [17748] [INFO] Reason: Worker failed to boot.

这里是wsgi.py:

from [the name of my project folder] import app

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

我怀疑我在 wsgi.py 中命名错误

【问题讨论】:

  • 请查看显示我仍在努力解决此问题的编辑

标签: python flask


【解决方案1】:

在尝试导入您的应用程序实例之前,尝试将您的项目路径插入到sys.path

wsgi.py:

import os
import sys

directory = os.path.dirname(os.path.realpath(__file__))
app_directory = os.path.join(directory, 'flaskr')

if directory not in sys.path:
    sys.path.insert(0, directory)

if app_directory not in sys.path:
    sys.path.insert(0, app_directory)

from flaskr import app

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

【讨论】:

  • 投下这个答案的人能否解释一下为什么在我实施这个解决方案之前这样做?
猜你喜欢
  • 2020-04-16
  • 2018-07-06
  • 2012-11-19
  • 2020-05-23
  • 1970-01-01
  • 1970-01-01
  • 2021-01-18
  • 1970-01-01
  • 2016-12-09
相关资源
最近更新 更多