问题描述
我希望Gunicorn通过WSGI与TileStache交谈.但是当我运行此命令时...
I want Gunicorn to talk with TileStache via WSGI. But when I run this command...
gunicorn "TileStache:WSGITileServer('/var/osm/bright/project/OSMBright4/tilestache.cfg')"
...我收到这些错误:
...I get these errors:
2013-03-30 23:02:41 [14300] [INFO] Starting gunicorn 0.17.2
2013-03-30 23:02:41 [14300] [INFO] Listening at: http://127.0.0.1:8000 (14300)
2013-03-30 23:02:41 [14300] [INFO] Using worker: sync
2013-03-30 23:02:41 [14305] [INFO] Booting worker with pid: 14305
Error loading Tilestache config:
2013-03-30 23:02:41 [14305] [ERROR] Exception in worker process:
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/gunicorn/arbiter.py", line 485, in spawn_worker
worker.init_process()
File "/usr/local/lib/python2.7/dist-packages/gunicorn/workers/base.py", line 100, in init_process
self.wsgi = self.app.wsgi()
File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/base.py", line 103, in wsgi
self.callable = self.load()
File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/wsgiapp.py", line 25, in load
return util.import_app(self.app_uri)
File "/usr/local/lib/python2.7/dist-packages/gunicorn/util.py", line 381, in import_app
app = eval(obj, mod.__dict__)
File "<string>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/TileStache/__init__.py", line 373, in __init__
self.config = parseConfigfile(config)
File "/usr/local/lib/python2.7/dist-packages/TileStache/__init__.py", line 166, in parseConfigfile
return Config.buildConfiguration(config_dict, dirpath)
File "/usr/local/lib/python2.7/dist-packages/TileStache/Config.py", line 217, in buildConfiguration
config.layers[name] = _parseConfigfileLayer(layer_dict, config, dirpath)
File "/usr/local/lib/python2.7/dist-packages/TileStache/Config.py", line 441, in _parseConfigfileLayer
layer.provider = _class(layer, **provider_kwargs)
File "/usr/local/lib/python2.7/dist-packages/TileStache/Mapnik.py", line 81, in __init__
engine = mapnik.FontEngine.instance()
NameError: global name 'mapnik' is not defined
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/gunicorn/arbiter.py", line 485, in spawn_worker
worker.init_process()
File "/usr/local/lib/python2.7/dist-packages/gunicorn/workers/base.py", line 100, in init_process
self.wsgi = self.app.wsgi()
File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/base.py", line 103, in wsgi
self.callable = self.load()
File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/wsgiapp.py", line 25, in load
return util.import_app(self.app_uri)
File "/usr/local/lib/python2.7/dist-packages/gunicorn/util.py", line 381, in import_app
app = eval(obj, mod.__dict__)
File "<string>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/TileStache/__init__.py", line 373, in __init__
self.config = parseConfigfile(config)
File "/usr/local/lib/python2.7/dist-packages/TileStache/__init__.py", line 166, in parseConfigfile
return Config.buildConfiguration(config_dict, dirpath)
File "/usr/local/lib/python2.7/dist-packages/TileStache/Config.py", line 217, in buildConfiguration
config.layers[name] = _parseConfigfileLayer(layer_dict, config, dirpath)
File "/usr/local/lib/python2.7/dist-packages/TileStache/Config.py", line 441, in _parseConfigfileLayer
layer.provider = _class(layer, **provider_kwargs)
File "/usr/local/lib/python2.7/dist-packages/TileStache/Mapnik.py", line 81, in __init__
engine = mapnik.FontEngine.instance()
NameError: global name 'mapnik' is not defined
2013-03-30 23:02:41 [14305] [INFO] Worker exiting (pid: 14305)
2013-03-30 23:02:41 [14300] [INFO] Shutting down: Master
2013-03-30 23:02:41 [14300] [INFO] Reason: Worker failed to boot.
有人知道这是什么意思吗?
Does anyone know what it means?
推荐答案
问题已解决.
就像卡梅尔提到的那样,问题出在Mapnik和TileStache,而不是Gunicorn.
It came up, as Karmel mentioned, that the problem lay in Mapnik and TileStache, and not Gunicorn.
经过一番研究,我发现python模块名称已经更改了通过不同的版本;直到版本2.0更改为mapnik2
之前,它都是mapnik
,然后在版本2.1中再次回到mapnik
.显然我已经安装了2.0版.
After some research I found out that there has been changes of the python module name through the different versions; it was mapnik
until version 2.0 when it changed to mapnik2
, and then back to mapnik
again at version 2.1. And obviously it appeared that I had installed version 2.0.
我想我可能已经在TileStache/mapnik.py
中更改为import mapnik2
,但我认为卸载Mapnik然后从源代码构建.花了一段时间,但绝对值得.
I suppose I just could have changed to import mapnik2
in TileStache/mapnik.py
, but I thought it would be more future friendly to uninstall Mapnik and then build it from source instead. It took a while, but definitely worth it.
非常感谢 Karmel 使我走上了正轨!
A big thanks to Karmel for putting me at the right track!
这篇关于使用WSGI时Gunicorn失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!