gunicorn无法启动蟒蛇前夕
问题描述:
这里的settings.pygunicorn无法启动蟒蛇前夕
[email protected]:/var/www/eve-auth# cat settings.py
DOMAIN = {'people': {}}
而这里的run.py
from eve import Eve
app = Eve()
if __name__ == '__main__':
app.run()
它的工作原理,当我运行它独立:
[email protected]:/var/www/eve-auth# python run.py
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
但失败当我通过gunicorn启动时运行:
[email protected]:/var/www/eve-auth# gunicorn -b 0.0.0.0:5000 run:app
[2016-02-12 02:07:22 +0000] [20] [INFO] Starting gunicorn 19.4.5
[2016-02-12 02:07:22 +0000] [20] [INFO] Listening at: http://0.0.0.0:5000 (20)
[2016-02-12 02:07:22 +0000] [20] [INFO] Using worker: sync
[2016-02-12 02:07:22 +0000] [23] [INFO] Booting worker with pid: 23
[2016-02-12 02:07:22 +0000] [23] [ERROR] Exception in worker process:
Traceback (most recent call last):
File "/usr/local/lib/python3.5/site-packages/eve/flaskapp.py", line 246, in validate_domain_struct
domain = self.config['DOMAIN']
KeyError: 'DOMAIN'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/lib/python3.5/site-packages/gunicorn/arbiter.py", line 515, in spawn_worker
worker.init_process()
File "/usr/local/lib/python3.5/site-packages/gunicorn/workers/base.py", line 122, in init_process
self.load_wsgi()
File "/usr/local/lib/python3.5/site-packages/gunicorn/workers/base.py", line 130, in load_wsgi
self.wsgi = self.app.wsgi()
File "/usr/local/lib/python3.5/site-packages/gunicorn/app/base.py", line 67, in wsgi
self.callable = self.load()
File "/usr/local/lib/python3.5/site-packages/gunicorn/app/wsgiapp.py", line 65, in load
return self.load_wsgiapp()
File "/usr/local/lib/python3.5/site-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp
return util.import_app(self.app_uri)
File "/usr/local/lib/python3.5/site-packages/gunicorn/util.py", line 357, in import_app
__import__(module)
File "/var/www/eve-auth/run.py", line 2, in <module>
app = Eve()
File "/usr/local/lib/python3.5/site-packages/eve/flaskapp.py", line 135, in __init__
self.validate_domain_struct()
File "/usr/local/lib/python3.5/site-packages/eve/flaskapp.py", line 248, in validate_domain_struct
raise ConfigException('DOMAIN dictionary missing or wrong.')
eve.exceptions.ConfigException: DOMAIN dictionary missing or wrong.
Traceback (most recent call last):
File "/usr/local/lib/python3.5/site-packages/eve/flaskapp.py", line 246, in validate_domain_struct
domain = self.config['DOMAIN']
KeyError: 'DOMAIN'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/lib/python3.5/site-packages/gunicorn/arbiter.py", line 515, in spawn_worker
worker.init_process()
File "/usr/local/lib/python3.5/site-packages/gunicorn/workers/base.py", line 122, in init_process
self.load_wsgi()
File "/usr/local/lib/python3.5/site-packages/gunicorn/workers/base.py", line 130, in load_wsgi
self.wsgi = self.app.wsgi()
File "/usr/local/lib/python3.5/site-packages/gunicorn/app/base.py", line 67, in wsgi
self.callable = self.load()
File "/usr/local/lib/python3.5/site-packages/gunicorn/app/wsgiapp.py", line 65, in load
return self.load_wsgiapp()
File "/usr/local/lib/python3.5/site-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp
return util.import_app(self.app_uri)
File "/usr/local/lib/python3.5/site-packages/gunicorn/util.py", line 357, in import_app
__import__(module)
File "/var/www/eve-auth/run.py", line 2, in <module>
app = Eve()
File "/usr/local/lib/python3.5/site-packages/eve/flaskapp.py", line 135, in __init__
self.validate_domain_struct()
File "/usr/local/lib/python3.5/site-packages/eve/flaskapp.py", line 248, in validate_domain_struct
raise ConfigException('DOMAIN dictionary missing or wrong.')
eve.exceptions.ConfigException: DOMAIN dictionary missing or wrong.
[2016-02-12 02:07:22 +0000] [23] [INFO] Worker exiting (pid: 23)
[2016-02-12 02:07:22 +0000] [20] [INFO] Shutting down: Master
[2016-02-12 02:07:22 +0000] [20] [INFO] Reason: Worker failed to boot.
我找不到关于gunicorn和python-eve的任何文档......所以我不确定从哪里挖掘。
答
我从未在Gunicorn上跑过Eve。然而,Eve是一个Flask子类,与Flask一起工作的大多数东西也适用于Eve。
根据瓶documentation你Gunicorn运行瓶/夏娃这样的:
gunicorn myproject:app
希望这有助于。
答
的问题是,夏娃使用相对路径来寻找settings.py
,最快的解决方法是使用绝对路径:
import os
from eve import Eve
app = Eve(__name__, settings=os.path.abspath('settings.py'))
if __name__ == '__main__':
app.run()