我想让Gunicorn通过WSGI与TileStache对话。但是当我运行这个命令时..。
gunicorn "TileStache:WSGITileServer('/var/osm/bright/project/OSMBright4/tilestache.cfg')"...I获取以下错误:
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.有人知道这是什么意思吗?
发布于 2013-04-01 18:55:48
问题已解决。
正如卡梅尔提到的,问题出在Mapnik和TileStache,而不是Gunicorn。
经过一些研究,我发现在不同的版本中都有changes of the python module name;它一直是mapnik,直到2.0版变成了mapnik2,然后又回到了2.1版的mapnik。显然,我似乎安装了2.0版。
我想我可以在TileStache/mapnik.py中改为import mapnik2,但我认为卸载Mapnik再卸载build it from source会更友好。这花了一段时间,但绝对值得。
非常感谢Karmel让我走上了正确的道路!
发布于 2013-03-31 08:32:29
你安装了python-mapnik吗?错误似乎出现在TileStache和mapnik的配置中,而不是gunicorn或WSGI。如果您查看TileStache/Mapknik.py (我在这里查找:https://github.com/migurski/TileStache/blob/master/TileStache/Mapnik.py),您会看到mapnik的初始导入传递了错误:
try:
import mapnik
except ImportError:
# can still build documentation
pass但是,当mapnik被期望出现在那里时,这将在第81行产生问题。因此,请确保apt-get安装了python-mapnik或确保mapnik在您的Python路径中。
https://stackoverflow.com/questions/15724672
复制相似问题