我正在尝试通过Gunicorn服务的Flask应用程序。
我正在使用virtualenv和python3。如果我将我的venv cd激活到我的app base dir,那么运行:
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
中的mysite我有以下内容:
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
在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和site-packages的路径。
从我读到的内容开始枪手,只需要安装它并运行gunicorn mysite:app
从mysite的父目录运行gunicorn我得到同样的找不到应用程序:' mysite',App无法加载错误,但没有得到DEBUG ... Config()记录(因为我们显然在错误的目录中开始)。从mysite / mysite运行gunicorn(显然是错误的)我在工作进程ereor中得到和Exception,ImportError:没有名为' mysite'。
的模块关于我如何获得枪声的任何线索?
答案 0 :(得分:29)
您将枪炮指向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