本文介绍了使用WSGI时Gunicorn失败的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我希望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失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

06-27 09:14