Mapnik 2.2.0を使用して、いくつかのマッピング機能を備えた(Python 2.6.6で実行される)かなり大きく複雑な(内部)Webポータルを継承しました。最近、Webサービスは、表示されるマップのいくつかを作成しようとすると500エラーをスローし始めましたが、唯一のエラーがあります。
$ Premature end of script headers: app.wsgi
マップは、(Pythonディクショナリから作成された)文字列として渡されるgeojsonから生成されます。私はそれをの1行のコードまで追跡しましたmap.py
。これにより、マップにレイヤーが追加されます。
data = mapnik.Ogr(file=json, layer='OGRGeoJSON')
そのコード行(および関連するm.layers[-1].data = data
)をコメント化すると、ポータルに画像が表示されますが、明らかにこのレイヤーはありません。jsonは有効です(http://geojsonlint.comで確認しました)。
デバッグ作業
別のjsonファイルを使用する
外部ソースからJSONを呼び出すと問題が再現されるかどうかを確認したいと思いました。したがって、json文字列を別のファイル(test.json
)としてmap.py
、と同じディレクトリに保存し、次のOgr
呼び出しを変更しました
data = mapnik.Ogr(file='test.json', layer='OGRGeoJSON')
それでも500エラーが発生しますが、少し冗長なエラーメッセージが表示されます。
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
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)
だからjsonは有効なようです
Pythonコマンドラインを使用する
私はまた、対話形式でのpythonを実行しようとしているのと同じディレクトリにあるmap.py
と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>
詳細情報
$ gdal-config --version
1.9.2
$ ogr2ogr --version
GDAL 1.9.2, released 2012/10/08
これはエラーなしで返されます(つまり、これはgeojsonが有効であることを意味し、http://geojsonlint.comを介してgeojsonを実行する以前のテストを確認します):
$ ogr2ogr testgeo.shp testgeo.json
OSバージョン
$ 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つのデバッグ作業は、json が有効であり、webstackを介して実行される場合を除いて、呼び出しが機能することを示しています。私は関連するすべてのファイルとディレクトリのアクセス許可と所有権を確認しましたが、それらはすべて期待どおりのようです。
他に何が問題を引き起こしている可能性がありますか?!
更新(元の質問をしてから2週間)
私は今日仕事に取り掛かり、エラーメッセージ(新しい週、最初からやり直す)をいじくることができるかどうかを確認するためにもう一度クラックがあると思いました。しかし、まったく奇妙なことに、コードは(今のところ、少なくとも)失敗しているようには見えません。私は何も変更していません。収集できる限り、サーバーのハードウェアの変更はありません。
これが原因の調査になり、再発を防ぐために私ができることは何かあるか...