Heroku 上缺少 GDAL
Missing GDAL on Heroku
Django 应用程序 运行ning 通过 django-geojson. In the admin interface, this field is editable via django-leaflet 将 GeoJSON 数据存储在其中一个模型中。当我 运行 在本地使用 ./manage.py runserver
应用程序时,界面工作正常,页面如下所示。
但是,当我部署到构建良好的 Heroku 并在管理界面中打开相同的 Location 实例时,蓝色标记不在地图上的任何位置,地图加载正常,我收到此错误交付给我:
Error creating geometry from value '{
"coordinates":[
"-105.2449000",
"40.0474000"
],
"type":"Point"
}' (Initializing geometry from JSON input requires GDAL.)
我只是在 models.py
中记录简单的点数据
from djgeojson.fields import PointField
from django.db import models
class Location(models.Model):
"""
A model subclass for recording geographic data.
"""
service_id = models.CharField(max_length=255, blank=True, null=True)
name = models.CharField(max_length=255, blank=True, null=True)
geom = PointField() # GeoJSON (remember, coordinates: [long, lat])
def __str__(self):
return self.name
这是我第一次使用 geoJson、Leaflet 和 Heroku。我是否遗漏了一些依赖性,是否有一些我忽略的 Heroku 配置?这是我的 requirements.txt
.
dj-database-url==0.4.1
Django==1.10
django-filter==0.13.0
django-geojson==2.9.0
django-leaflet==0.18.1
gunicorn==19.6.0
httplib2==0.9.2
jsonfield==1.0.3
oauth2==1.9.0.post1
oauthlib==1.1.2
psycopg2==2.6.2
PyJWT==1.4.1
python-openid==2.2.5
requests==2.10.0
requests-oauthlib==0.6.2
six==1.10.0
wheel==0.24.0
whitenoise==3.2
GDAL 不是 Python 依赖项,它是一个单独的框架,必须安装在您的生产环境 (Heroku) 中。
一种方法是使用单独的构建包,如 heroku-geo-buildpack. Heroku has instructions on how to add multiple buildpacks - 即此处 Python 和 GDAL。
安装后,heroku-geo-buildpack 建议在 Django 应用程序中安装以下用于测试 GDAL 的方法。从你的 Heroku Python 控制台执行:
>>> from django.contrib.gis import gdal
>>> gdal.HAS_GDAL
True
你应该可以开始了。
Heroku 目前 运行正在使用 heroku-18 堆栈,对于 python 项目,默认构建包具有地理空间库 https://github.com/heroku/heroku-buildpack-python
使用它们 运行 heroku config:set BUILD_WITH_GEO_LIBRARIES=1
并添加
GDAL_LIBRARY_PATH = os.environ.get('GDAL_LIBRARY_PATH')
GEOS_LIBRARY_PATH = os.environ.get('GEOS_LIBRARY_PATH')
至settings.py
。
另见 https://github.com/heroku/heroku-buildpack-python/issues/752
看起来 Heroku 已经放弃了对 BUILD_WITH_GEO_LIBRARIES
的支持。您现在需要添加构建包以启用支持:
# Add the buildpack
heroku buildpacks:add --index 1 https://github.com/heroku/heroku-geo-buildpack.git
# Remove the environment variable
heroku config:unset BUILD_WITH_GEO_LIBRARIES
Django 应用程序 运行ning 通过 django-geojson. In the admin interface, this field is editable via django-leaflet 将 GeoJSON 数据存储在其中一个模型中。当我 运行 在本地使用 ./manage.py runserver
应用程序时,界面工作正常,页面如下所示。
但是,当我部署到构建良好的 Heroku 并在管理界面中打开相同的 Location 实例时,蓝色标记不在地图上的任何位置,地图加载正常,我收到此错误交付给我:
Error creating geometry from value '{
"coordinates":[
"-105.2449000",
"40.0474000"
],
"type":"Point"
}' (Initializing geometry from JSON input requires GDAL.)
我只是在 models.py
from djgeojson.fields import PointField
from django.db import models
class Location(models.Model):
"""
A model subclass for recording geographic data.
"""
service_id = models.CharField(max_length=255, blank=True, null=True)
name = models.CharField(max_length=255, blank=True, null=True)
geom = PointField() # GeoJSON (remember, coordinates: [long, lat])
def __str__(self):
return self.name
这是我第一次使用 geoJson、Leaflet 和 Heroku。我是否遗漏了一些依赖性,是否有一些我忽略的 Heroku 配置?这是我的 requirements.txt
.
dj-database-url==0.4.1
Django==1.10
django-filter==0.13.0
django-geojson==2.9.0
django-leaflet==0.18.1
gunicorn==19.6.0
httplib2==0.9.2
jsonfield==1.0.3
oauth2==1.9.0.post1
oauthlib==1.1.2
psycopg2==2.6.2
PyJWT==1.4.1
python-openid==2.2.5
requests==2.10.0
requests-oauthlib==0.6.2
six==1.10.0
wheel==0.24.0
whitenoise==3.2
GDAL 不是 Python 依赖项,它是一个单独的框架,必须安装在您的生产环境 (Heroku) 中。
一种方法是使用单独的构建包,如 heroku-geo-buildpack. Heroku has instructions on how to add multiple buildpacks - 即此处 Python 和 GDAL。
安装后,heroku-geo-buildpack 建议在 Django 应用程序中安装以下用于测试 GDAL 的方法。从你的 Heroku Python 控制台执行:
>>> from django.contrib.gis import gdal
>>> gdal.HAS_GDAL
True
你应该可以开始了。
Heroku 目前 运行正在使用 heroku-18 堆栈,对于 python 项目,默认构建包具有地理空间库 https://github.com/heroku/heroku-buildpack-python
使用它们 运行 heroku config:set BUILD_WITH_GEO_LIBRARIES=1
并添加
GDAL_LIBRARY_PATH = os.environ.get('GDAL_LIBRARY_PATH')
GEOS_LIBRARY_PATH = os.environ.get('GEOS_LIBRARY_PATH')
至settings.py
。
另见 https://github.com/heroku/heroku-buildpack-python/issues/752
看起来 Heroku 已经放弃了对 BUILD_WITH_GEO_LIBRARIES
的支持。您现在需要添加构建包以启用支持:
# Add the buildpack
heroku buildpacks:add --index 1 https://github.com/heroku/heroku-geo-buildpack.git
# Remove the environment variable
heroku config:unset BUILD_WITH_GEO_LIBRARIES