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 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
Flask Gunicorn 应用程序无法让 __name__ 等于 '__main__'
在 Gunicorn / Flask 应用程序中的进程之间共享静态全局数据
一周掌握Flask框架学习笔记Flask项目部署(使用gunicorn和nginxuWSGI和nginx两种部署方式)