在Heroku上使用postgis Geodjango获取错误

时间:2016-06-18 22:15:18

标签: django heroku postgis geodjango

安装了Postgis扩展程序:

 :DATABASE=> SELECT postgis_version();                                         
        postgis_version            

 2.2 USE_GEOS=1 USE_PROJ=1 USE_STATS=1

我有以下构建包:

  1. https://github.com/cyberdelia/heroku-geo-buildpack.git
  2. https://github.com/heroku/heroku-buildpack-python.git
  3. 当我运行manage.py migrate时,我得到:

    AttributeError: 'DatabaseOperations' object has no attribute 'geo_db_type'
    

    我正在使用现在支持postgis的业余爱好deb postgres https://devcenter.heroku.com/changelog-items/792

    我是否需要安装其他构建包或添加一些其他配置?一切都在本地使用postgis。

2 个答案:

答案 0 :(得分:1)

我终于有时间回去看看这个。事实证明问题是Heroku没有正确导入我的设置。我正在使用cookiecutter-django设置方案,将常用设置导入生产中,并且由于某些原因,Heroku没有按预期工作。

我的常用设置包含:

DATABASES['default']['ATOMIC_REQUESTS'] = True
DATABASES['default']['ENGINE'] = "django.contrib.gis.db.backends.postgis"

我的作品包含:

DATABASES['default'] = env.db("DATABASE_URL")

Heroku没有导入这些常用设置。当我在heroku中检查django shell时,生产设置已经

 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'ATOMIC_REQUESTS': False

将DATABASES ['default'] ['ENGINE'] =“django.contrib.gis.db.backends.postgis”添加到生产设置后,一切正常。

有人知道从common.py正确导入设置会出现什么问题吗?它似乎正确导入其余设置,而不是数据库。

答案 1 :(得分:0)

我也有这个问题!

我注意到the environment var for the PostGreSQL server had postgres inside of it

我认为用postgis替换它会有效。

是的,(工作现场是 here, git repo是 here

奇怪的是,这对我有用。

if 'DATABASE_URL' in os.environ:  # please help me heroku gods
    if 'postgres' in os.environ['DATABASE_URL']:
        os.environ['DATABASE_URL'] = os.environ['DATABASE_URL'].replace('postgres', 'postgis')

它只是将环境变量替换为其中包含postgis的变量。