Mapnik + TileStache + uWSGI / IOError: невозможно определить файл изображения - PullRequest
0 голосов
/ 26 июня 2019

У меня есть среда Vagrant со скриптом инициализации, который запускает новый сервер Ubuntu 16.04 с Mapnik + Postgis + TileStache + uWSGI + Nginx для обслуживания листов карты.

Полгода назад все работало нормально. Теперь, после запуска контейнера Vagrant, этап подготовки работает нормально, все операции импорта osm2pgsql сработали, и мой TileStache приветствует меня, что указывает на то, что nginx -> uwsgi -> tilestache работает.

Я уже пытался проверить, работает ли PIL / pillow. Простые скрипты, подобные следующим, полностью работают:

from PIL import Image
import io
with open('test.png') as f:
   io = io.BytesIO(f.read())
im = Image.open(io)

Мой конфиг плитки:

{
    "cache": {
        "name": "Disk",
        "path": "./cache/",
          "umask": "0000"
    },
    "layers": {
        "osm_layer": {
            "provider": {
                "name": "proxy", 
                "url": "http://tile.openstreetmap.org/{Z}/{X}/{Y}.png"
            }
        }  
    }
}

Но когда я пытаюсь получить доступ к изображению плитки, например: http://localhost/osm_layer/0/0/0.png, оно не работает. Обычно это возвращает мне ту же плитку, что и http://tile.openstreetmap.org/0/0/0.png

Я получаю следующую ошибку в лог-файлах:

Jun 26 09:07:16 gis uwsgi[31478]: Traceback (most recent call last):
Jun 26 09:07:16 gis uwsgi[31478]:   File "/usr/lib/python2.7/dist-packages/TileStache/__init__.py", line 379, in __call__
Jun 26 09:07:16 gis uwsgi[31478]:     status_code, headers, content = requestHandler2(self.config, path_info, query_string, script_name)
Jun 26 09:07:16 gis uwsgi[31478]:   File "/usr/lib/python2.7/dist-packages/TileStache/__init__.py", line 255, in requestHandler2
Jun 26 09:07:16 gis uwsgi[31478]:     status_code, headers, content = layer.getTileResponse(coord, extension)
Jun 26 09:07:16 gis uwsgi[31478]:   File "/usr/lib/python2.7/dist-packages/TileStache/Core.py", line 414, in getTileResponse
Jun 26 09:07:16 gis uwsgi[31478]:     tile = self.render(coord, format)
Jun 26 09:07:16 gis uwsgi[31478]:   File "/usr/lib/python2.7/dist-packages/TileStache/Core.py", line 500, in render
Jun 26 09:07:16 gis uwsgi[31478]:     tile = provider.renderTile(width, height, srs, coord)
Jun 26 09:07:16 gis uwsgi[31478]:   File "/usr/lib/python2.7/dist-packages/TileStache/Providers.py", line 250, in renderTile
Jun 26 09:07:16 gis uwsgi[31478]:     tile = Verbatim(body)
Jun 26 09:07:16 gis uwsgi[31478]:   File "/usr/lib/python2.7/dist-packages/TileStache/Providers.py", line 164, in __init__
Jun 26 09:07:16 gis uwsgi[31478]:     self.format = self.image().format
Jun 26 09:07:16 gis uwsgi[31478]:   File "/usr/lib/python2.7/dist-packages/TileStache/Providers.py", line 170, in image
Jun 26 09:07:16 gis uwsgi[31478]:     self._image = Image.open(self.buffer)
Jun 26 09:07:16 gis uwsgi[31478]:   File "/usr/lib/python2.7/dist-packages/PIL/Image.py", line 2295, in open
Jun 26 09:07:16 gis uwsgi[31478]:     % (filename if filename else fp))
Jun 26 09:07:16 gis uwsgi[31478]: IOError: cannot identify image file <StringIO.StringIO instance at 0x7f513b7f5a28>
Jun 26 09:07:16 gis uwsgi[31478]: [pid: 31484|app: 0|req: 3/6] 192.168.20.1 () {42 vars in 681 bytes} [Wed Jun 26 09:07:16 2019] GET /osm_layer/0/0/0.png => generated 0 bytes in 138 msecs (HTTP/2.0 500) 0 headers in 0 bytes (0 switches on core 0)

Кажется, что есть проблемы с соответствующими пакетами, файлами изображений или с пакетами PIL / pillow, поскольку для воспроизведения ошибки достаточно использовать только прокси-OSM-плитки. На данный момент нет импорта или постгреса. Эти плитки OSM проксируются на http://tile.openstreetmap.org/{Z}/{X}/{Y}.png

Также я могу видеть, что tilestache создает структуру каталогов кэша, но поскольку существует ошибка IOError, никакие фактические плитка / изображение не кэшируются.

...