Gunicorn 无法加载 Flask 应用程序

Posted

技术标签:

【中文标题】Gunicorn 无法加载 Flask 应用程序【英文标题】:Gunicorn failed to load Flask application 【发布时间】:2016-07-20 16:23:33 【问题描述】:

我有一个试图通过 Gunicorn 服务的 Flask 应用程序。

我正在使用 virtualenv 和 python3。如果我将 venv cd 激活到我的应用程序基础目录,则运行:

gunicorn mysite:app

我明白了:

Starting gunicorn
Listening at http://127.0.0.1:8000
DEBUG:mysite.settings:>>Config()
...
Failed to find application: 'mysite'
Worker exiting
Shutting down: master
Reason: App failed to load

查看 /etc/nginx/sites-available 我只有“默认”文件。在启用站点时,我没有文件。

在我的 nginx.conf 文件中,我有:

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

应用结构:

mysite    #this is where I cd to and run gunicorn mysite:app
--manage.py
--/mysite
----settings.py
----__init__.py

manage.py 我的网站我有以下内容:

logger.debug("manage.py entry point")
app = create_app(app_name)
manager = Manager(app)

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

__init__.py 文件中:

def create_app(object_name):
    app = Flask(__name__)
    #more setup here
    return app

在我settings.py的app目录下

class Config(object):
    logger.debug(">>Config()")  #this logs OK so gunicorn is at least starting in correct directory

如果我运行,则从 virtualenv 内部

print(sys.path)

我找到了这个 virtualenv 的 python 和站点包的路径。

从我读过的开始 gunicorn 开始,只需安装它并运行 gunicorn mysite:app

从 mysite 的父目录运行 gunicorn 我得到同样的 failed to find application: 'mysite', App failed to load 错误,但没有记录 DEBUG...Config() (我们清楚地在错误的目录开始)。从 mysite/mysite 运行 gunicorn(显然错误)我在工作进程中遇到异常,ImportError: No module named 'mysite'。

关于如何让 gunicorn 运行的任何线索?

【问题讨论】:

【参考方案1】:

您将 gunicorn 指向 mysite:app,相当于 from mysite import app。但是,mysite 的*** (__init__.py) 级导入中没有 app 对象。告诉 gunicorn 给工厂打电话。

gunicorn "mysite:create_app()"

您也可以将参数传递给调用。

gunicorn "mysite:create_app('production')"

在内部,这相当于:

from mysite import create_app
app = create_app('production')

或者,您可以使用单独的文件进行设置。在您的情况下,您已经在 manage.py 中初始化了一个 app

gunicorn manage:app

【讨论】:

以上是关于Gunicorn 无法加载 Flask 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如何在多线程模式下使用 Gunicorn 运行 Flask

Flask Gunicorn 应用程序无法让 __name__ 等于 '__main__'

在 Gunicorn / Flask 应用程序中的进程之间共享静态全局数据

一周掌握Flask框架学习笔记Flask项目部署(使用gunicorn和nginxuWSGI和nginx两种部署方式)

Python3+Gunicorn+Nginx 部署Flask项目

Flask 应用程序退出时如何停止 Gunicorn