首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gunicorn在使用WSGI时失败

Gunicorn在使用WSGI时失败
EN

Stack Overflow用户
提问于 2013-03-31 07:30:59
回答 2查看 1.5K关注 0票数 0

我想让Gunicorn通过WSGI与TileStache对话。但是当我运行这个命令时..。

代码语言:javascript
复制
gunicorn "TileStache:WSGITileServer('/var/osm/bright/project/OSMBright4/tilestache.cfg')"

...I获取以下错误:

代码语言:javascript
复制
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.

有人知道这是什么意思吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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让我走上了正确的道路!

票数 0
EN

Stack Overflow用户

发布于 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的初始导入传递了错误:

代码语言:javascript
复制
try:
    import mapnik
except ImportError:
    # can still build documentation
    pass

但是,当mapnik被期望出现在那里时,这将在第81行产生问题。因此,请确保apt-get安装了python-mapnik或确保mapnik在您的Python路径中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15724672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档