尝试在Heroku上运行GeoDjango应用程序,这是一项非常重要的工作。在经历了各种各样的问题之后,我来到了一个似乎无法破解我的方式。
File "/app/.heroku/python/lib/python3.6/site-packages/django/db/models/fields/__init__.py", line 673, in db_parameters
type_string = self.db_type(connection)
File "/app/.heroku/python/lib/python3.6/site-packages/django/contrib/gis/db/models/fields.py", line 105, in db_type
return connection.ops.geo_db_type(self)
AttributeError: 'DatabaseOperations' object has no attribute 'geo_db_type'
我已正确使用dj-database-url
设置引擎,但我仍然看到错误
我添加了一个print语句来输出我的数据库设置,因为它们被py
解释在settings.py
:
if os.getenv('DYNO'):
GDAL_LIBRARY_PATH = os.path.expandvars(os.getenv('GDAL_LIBRARY_PATH'))
GEOS_LIBRARY_PATH = os.path.expandvars(os.getenv('GEOS_LIBRARY_PATH'))
DATABASES['default'] = dj_database_url.parse(os.getenv('DATABASE_URL'),'django.contrib.gis.db.backends.postgis')
print(DATABASES['default'])
以下是输出heroku服务器解释为DATABASES['default']
凭据的打印语句
{'NAME': 'name', 'USER': 'usr', 'PASSWORD': 'pw', 'HOST': 'herokuec2host.amazonaws.com', 'PORT': 5432, 'CONN_MAX_AGE': 0, 'ENGINE': 'django.contrib.gis.db.backends.postgis'}
任何帮助表示赞赏。我知道关于这个问题的各种类似的stackoverflow帖子,但是我研究过的所有解决方案都没有解决问题 - 所以再问一遍。
答案 0 :(得分:0)
Geodjango需要连接“ postgis:// ...”,但是heroku将数据库设置更改为“ postgres://”。因此,如果将DATABASES变量移到settings.py中的底部,则问题已解决。快乐黑客:)
django_heroku.settings(locals())
DATABASES = {
'default': {
'ENGINE': 'django.contrib.gis.db.backends.postgis',
'NAME': '*',
'USER': '*',
'PASSWORD': '*',
'HOST': '*',
'PORT': '5432',
},
}