gunicorn:无法在模块中找到属性 'app'
gunicorn: Failed to find attribute 'app' in module
嗨,我正在尝试 运行,
gunicorn --bind localhost:8000 --worker-class sanic_gunicorn.Worker module:app
我有以下文件
# ls
build
setup.py
dist
module
module.egg-info
venv
#cd module
#ls
__init__.py
__pycache__
__main__.py
app.py
__main__.py
内容如下
from module.app import create_app_instance
if __name__ == '__main__':
app = create_app_instance()
app.run()
app.py的内容是
#some imports
def create_app_instance():
app = Sanic(name = "app_name")
.....
return app
我正在使用 Sanic 网络框架,当我 运行 宁它是开发服务器时 python -m module
它工作正常
python3 -m module
[2021-06-16 22:31:36 -0700] [80176] [INFO] Goin' Fast @ http://127.0.0.1:8000
[2021-06-16 22:31:36 -0700] [80176] [INFO] Starting worker [80176]
谁能告诉我我做错了什么?
简单的答案是模块内部没有 app
暴露。您有 create_app_instance()
方法,但未调用此方法。
我建议您按如下方式重构代码。文件结构为:
./wsgi.py
./module/__init__.py
这些文件的内容如下:
.\wsgi.py
from module import create_app_instance
app = create_app_instance()
if __name__ == '__main__':
app.run()
.\module\__init__.py
# this is the contents of your current app.py
#some imports
def create_app_instance():
app = Sanic(name = "app_name")
.....
return app
然后启动服务器的 gunicorn 行将是(请注意下面 的评论):
gunicorn --bind localhost:8000 --worker-class sanic_gunicorn.Worker wsgi:app
它的作用是调用 wsgi.py
中公开的 app
实例。不需要 __main__.py
,您的 app.py
中的代码已移至 __init__.py
我强烈建议您通读 documentation/tutorials for Application Factory Pattern
for Flask。原理本身和Sanic一样,但是Flask原理的文章比较多...
嗨,我正在尝试 运行,
gunicorn --bind localhost:8000 --worker-class sanic_gunicorn.Worker module:app
我有以下文件
# ls
build
setup.py
dist
module
module.egg-info
venv
#cd module
#ls
__init__.py
__pycache__
__main__.py
app.py
__main__.py
内容如下
from module.app import create_app_instance
if __name__ == '__main__':
app = create_app_instance()
app.run()
app.py的内容是
#some imports
def create_app_instance():
app = Sanic(name = "app_name")
.....
return app
我正在使用 Sanic 网络框架,当我 运行 宁它是开发服务器时 python -m module
它工作正常
python3 -m module
[2021-06-16 22:31:36 -0700] [80176] [INFO] Goin' Fast @ http://127.0.0.1:8000
[2021-06-16 22:31:36 -0700] [80176] [INFO] Starting worker [80176]
谁能告诉我我做错了什么?
简单的答案是模块内部没有 app
暴露。您有 create_app_instance()
方法,但未调用此方法。
我建议您按如下方式重构代码。文件结构为:
./wsgi.py
./module/__init__.py
这些文件的内容如下:
.\wsgi.py
from module import create_app_instance
app = create_app_instance()
if __name__ == '__main__':
app.run()
.\module\__init__.py
# this is the contents of your current app.py
#some imports
def create_app_instance():
app = Sanic(name = "app_name")
.....
return app
然后启动服务器的 gunicorn 行将是(请注意下面
gunicorn --bind localhost:8000 --worker-class sanic_gunicorn.Worker wsgi:app
它的作用是调用 wsgi.py
中公开的 app
实例。不需要 __main__.py
,您的 app.py
中的代码已移至 __init__.py
我强烈建议您通读 documentation/tutorials for Application Factory Pattern
for Flask。原理本身和Sanic一样,但是Flask原理的文章比较多...