如何在 Webfaction 上已存在的 postgres 数据库上启用 GeoDjango?

How can I enable GeoDjango on an already-existing postgres database on Webfaction?

我是 运行 Webfaction 共享主机上的 Django 1.8.4,我需要启用 GeoDjango。这些是我采取的步骤:

  1. 根据文档将我的项目转换为使用 GeoDjango。
  2. 在 Webfaction UI 中,将 PostGIS 扩展添加到我的数据库中。
  3. 运行./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