我无法在heroku上运行一个简单的GeoDjango应用程序。我为我的数据库创建了postgis扩展,但是我无法在没有收到以下错误的情况下运行syncdb:
from django.contrib.gis.geometry.backend import Geometry
File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/gis/geometry/backend/__init__.py", line 14, in <module>
'"%s".' % geom_backend)
django.core.exceptions.ImproperlyConfigured: Could not import user-defined GEOMETRY_BACKEND "geos".
任何想法我做错了什么?也有人知道在heroku上运行一个简单的geodjango项目的教程吗?谢谢你的帮助
答案 0 :(得分:3)
我遇到了同样的问题而Joe是正确的,你错过了一个buildpack。我做的不同的是包括heroku-geo-buildpack和heroku-buildpack-python。两者都可以通过使用heroku-buildpack-multi并在主目录中添加“.buildpacks”文件来包含其他构建包。
https://github.com/ddollar/heroku-buildpack-multi
所以将buildpack-multi设置为buildpack并在项目基目录中添加.buildpacks文件:
$ heroku config:set BUILDPACK_URL=https://github.com/ddollar/heroku-buildpack-multi.git
$ touch .buildpacks
# .buildpacks
https://github.com/cyberdelia/heroku-geo-buildpack.git#1.0
https://github.com/heroku/heroku-buildpack-python
当您推送它时,Heroku将安装运行python(python,pip等)所需的软件包,以及运行postgis(geos,proj和gdal)所需的软件包。
我试试了heroku-buildpack-geodjango,但我相信它可能已经过时了(一年内没有更新)。
答案 1 :(得分:2)
我在使用ddollar https://github.com/ddollar/heroku-buildpack-multi的多buildpack方法之后遇到了完全相同的错误,直到今天早上才出现问题。正如Jeff所写,你只需将你的buildpack指向multi,然后添加一个.buildpacks文件。
$ heroku config:set BUILDPACK_URL=https://github.com/ddollar/heroku-buildpack-multi.git
$ cat .buildpacks
# .buildpacks
https://github.com/cyberdelia/heroku-geo-buildpack.git
https://github.com/heroku/heroku-buildpack-python
另外不要忘记将django.contrib.gis添加到设置中的应用程序。
当你推送到heroku时,一切都应该顺利并安装geos和gdal库但是你会发现django没有找到它们而你得到了错误。这是因为django想要按照文档的完整路径:
https://docs.djangoproject.com/en/dev/ref/contrib/gis/install/geolibs/
所以将此添加到settings.py:
GEOS_LIBRARY_PATH = "{}/libgeos_c.so".format(environ.get('GEOS_LIBRARY_PATH'))
GDAL_LIBRARY_PATH = "{}/libgdal.so".format(environ.get('GDAL_LIBRARY_PATH'))
答案 2 :(得分:1)
好像你缺少一些C库。考虑一下GeoDjango Heroku buildpack:
https://github.com/cirlabs/heroku-buildpack-geodjango/
heroku create --stack cedar --buildpack http://github.com/cirlabs/heroku-buildpack-geodjango/
git push heroku master
应使用这些命令自动安装所需的库。