我有一个 flask 应用程序,正在尝试通过Gunicorn服务。
我正在使用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中查找,我只有文件'default'。在启用站点的情况下,我没有文件。
在我的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
在Mysite的
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
中的应用目录中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 mysite:app
从mysite的父目录中运行gunicorn时,我仍然遇到相同的问题,无法找到应用程序:“mysite”,App加载失败,但没有记录DEBUG ... Config()(因为我们显然在错误的目录中开始)。从mysite/mysite运行gunicorn(明显错误)我得到了,并且工作进程ereor中出现异常,ImportError:没有名为“mysite”的模块。
关于我如何让金枪鱼运行的任何线索?
最佳答案
您将gunicorn指向mysite:app
,它等于from mysite import app
。但是,在app
的顶级(__init__.py
)导入中没有mysite
对象。告诉gunicorn给工厂打电话。
gunicorn "mysite:create_app()"
您也可以将参数传递给调用。
gunicorn "mysite:create_app('production')"
在内部,这等效于:
from mysite import create_app
app = create_app('production')
或者,您可以使用单独的文件进行设置。在您的情况下,您已经在
app
中初始化了manage.py
。gunicorn manage:app
关于python - Gunicorn无法加载Flask应用程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36346550/