0

我希望 Gunicorn 通过 WSGI 与 TileStache 交谈。但是当我运行这个命令时......

gunicorn "TileStache:WSGITileServer('/var/osm/bright/project/OSMBright4/tilestache.cfg')"

...我收到这些错误:

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.

有谁知道这意味着什么?

4

2 回答 2

2

你有安装 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 install python-mapnik 或确保 mapnik 在您的 Python 路径中。

于 2013-03-31T00:32:28.897 回答
0

问题解决了。

正如 Karmel 所提到的,问题在于 Mapnik 和 TileStache,而不是 Gunicorn。

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.

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.

A big thanks to Karmel for putting me at the right track!

于 2013-04-01T10:55:47.733 回答