Tôi đã thừa hưởng một cổng web khá lớn / phức tạp (nội bộ) (chạy theo python 2.6.6), có một số khả năng ánh xạ, sử dụng Mapnik 2.2.0. Dịch vụ web gần đây đã bắt đầu ném 500 lỗi khi nó cố gắng tạo một số bản đồ được hiển thị, với lỗi duy nhất:
$ Premature end of script headers: app.wsgi
Các bản đồ được tạo từ Geojson được truyền dưới dạng một chuỗi (đã được tạo từ một từ điển python); Tôi đã theo dõi nó xuống 1 dòng mã trong một map.py
, thêm một lớp vào bản đồ:
data = mapnik.Ogr(file=json, layer='OGRGeoJSON')
Khi tôi nhận xét dòng mã đó (và liên kết m.layers[-1].data = data
) thì hình ảnh được hiển thị trên cổng, nhưng rõ ràng không có lớp này. Các json là hợp lệ (tôi đã kiểm tra nó trên http://geojsonlint.com ).
Nỗ lực gỡ lỗi
Sử dụng một tệp json riêng
Tôi muốn xem liệu việc gọi JSON từ một nguồn bên ngoài có sao chép vấn đề này không. Do đó, tôi đã lưu chuỗi json dưới dạng một tệp riêng ( test.json
), trong cùng thư mục với map.py
và sửa đổi lệnh Ogr
gọi thành
data = mapnik.Ogr(file='test.json', layer='OGRGeoJSON')
Tôi vẫn nhận được một lỗi 500, nhưng với một thông báo lỗi dài dòng hơn một chút:
datasource = mapnik.Ogr(file='testgeo.json', layer='OGRGeoJSON')
File /usr/lib64/python2.6/site-packages/mapnik/__init__.py, line 536, in Ogr
return CreateDatasource(keywords)
RuntimeError: OGR Plugin: Failed to read GeoJSON data
Kiểm tra Geojson
$ ogrinfo testgeo.json
ERROR 4: GeoJSON Driver doesn't support update.
Had to open data source read-only.
INFO: Open of `testgeo.json'
using driver `GeoJSON' successful.
1: OGRGeoJSON (3D Polygon)
Vì vậy, json có vẻ hợp lệ
Sử dụng dòng lệnh python
Tôi cũng đã thử chạy python tương tác trong cùng thư mục với map.py
vàtest.json
:
$ python
Python 2.6.6 (r266:84292, Jul 23 2015, 15:22:56)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-11)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import mapnik
>>> mapnik.Ogr(file="testgeo.json", layer="OGRGeoJSON")
<mapnik.Datasource object at 0x7f6243c27398>
Thêm thông tin
$ gdal-config --version
1.9.2
$ ogr2ogr --version
GDAL 1.9.2, released 2012/10/08
Điều này trả về không có lỗi (vì vậy tôi cho rằng điều này có nghĩa là Geojson là hợp lệ, xác nhận thử nghiệm trước đây của tôi về việc chạy Geojson thông qua http://geojsonlint.com ):
$ ogr2ogr testgeo.shp testgeo.json
Phiên bản của hệ điều hành
$ lsb_release -a
LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
Distributor ID: CentOS
Description: CentOS release 6.7 (Final)
Release: 6.7
Codename: Final
3 nỗ lực gỡ lỗi này cho thấy json là hợp lệ và cuộc gọi hoạt động, ngoại trừ khi nó chạy qua webstack. Tôi đã kiểm tra quyền và quyền sở hữu của tất cả các tệp và thư mục có liên quan và tất cả chúng đều có vẻ như tôi mong đợi.
Điều gì khác có thể gây ra vấn đề?!
Cập nhật (2 tuần sau khi đặt câu hỏi ban đầu)
Hôm nay tôi đã đi làm và nghĩ rằng tôi sẽ có một vết nứt khác để xem liệu tôi có thể trêu chọc một số thông báo lỗi không (tuần mới, khởi đầu mới). Nhưng, hoàn toàn kỳ lạ, mã dường như không bị lỗi (ít nhất là bây giờ, ít nhất). Tôi đã không thay đổi gì , và theo như tôi có thể thu thập, không có thay đổi phần cứng nào cho các máy chủ.
Bây giờ điều này trở thành một cuộc điều tra về những gì đã gây ra nó, và liệu tôi có thể làm gì để ngăn chặn nó xảy ra lần nữa không ...