如何在 Webfaction 上已存在的 postgres 数据库上启用 GeoDjango?
How can I enable GeoDjango on an already-existing postgres database on Webfaction?
我是 运行 Webfaction 共享主机上的 Django 1.8.4,我需要启用 GeoDjango。这些是我采取的步骤:
- 根据文档将我的项目转换为使用 GeoDjango。
- 在 Webfaction UI 中,将 PostGIS 扩展添加到我的数据库中。
运行./manage.py migrate
。这是错误:
django.db.utils.OperationalError: could not open extension control file "/usr/pgsql-9.1/share/extension/postgis.control": No such file or `directory
有一种简单但可怕的方法可以使它正常工作。将以下设置指定为与您的 webfaction 数据库同名:
# settings.py
...
POSTGIS_TEMPLATE = 'my_database_name'
现在 ./manage.py migrate
应该可以正常工作了。
说明
这个错误的原因是因为 Django 认为 PostGIS 没有安装在数据库上,并试图将其作为扩展安装,PostGIS 2 风格。
它执行的测试是查看 PostGIS 数据库模板是否存在。如果不是,它会尝试以与 PostGIS < 2 不兼容的方式安装它(这是在 Webfaction 上安装的)。
通过更改此设置,Django 检查是否存在普通数据库(而不是 PostGIS 模板),然后得出结论认为一切设置正确 - 确实如此。错误的测试,但正确的结果。
如果您想知道到底发生了什么,请查看 django.contrib.gis.db.backends.postgis.base.DatabaseWrapper
。
我是 运行 Webfaction 共享主机上的 Django 1.8.4,我需要启用 GeoDjango。这些是我采取的步骤:
- 根据文档将我的项目转换为使用 GeoDjango。
- 在 Webfaction UI 中,将 PostGIS 扩展添加到我的数据库中。
运行
./manage.py migrate
。这是错误:django.db.utils.OperationalError: could not open extension control file "/usr/pgsql-9.1/share/extension/postgis.control": No such file or `directory
有一种简单但可怕的方法可以使它正常工作。将以下设置指定为与您的 webfaction 数据库同名:
# settings.py
...
POSTGIS_TEMPLATE = 'my_database_name'
现在 ./manage.py migrate
应该可以正常工作了。
说明
这个错误的原因是因为 Django 认为 PostGIS 没有安装在数据库上,并试图将其作为扩展安装,PostGIS 2 风格。
它执行的测试是查看 PostGIS 数据库模板是否存在。如果不是,它会尝试以与 PostGIS < 2 不兼容的方式安装它(这是在 Webfaction 上安装的)。
通过更改此设置,Django 检查是否存在普通数据库(而不是 PostGIS 模板),然后得出结论认为一切设置正确 - 确实如此。错误的测试,但正确的结果。
如果您想知道到底发生了什么,请查看 django.contrib.gis.db.backends.postgis.base.DatabaseWrapper
。