我有一个 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/

10-12 21:59