2012-09-21 46 views
34

我试图对在Heroku我GeoDjango内置的应用程序运行时heroku run python manage.py syncdb“DatabaseOperations”对象有没有属性“geo_db_type”的错误,但我得到了以下错误:获取做执行syncdb

AttributeError的:“DatabaseOperations”对象有没有属性“geo_db_type”

Allofmyresearch取得了相同的解决方案:确保使用django.contrib.gis.db.backends.postgis作为数据库引擎。有趣的是,我已经在做这(我也有django.contrib.gisINSTALLED_APPS):

settings.py 

DATABASES = { 
    'default': { 
    'ENGINE': 'django.contrib.gis.db.backends.postgis', 
    'NAME': '...', 
    'HOST': '...', 
    'PORT': ..., 
    'USER': '...', 
    'PASSWORD': '...' 
    } 
} 

INSTALLED_APPS = (
    ..., 
    'django.contrib.gis', 
) 

有别的我失踪?任何帮助是极大的赞赏,下面是引用完整的错误跟踪:

Running `python manage.py syncdb` attached to terminal... up, run.1 
Creating tables ... 
Creating table auth_permission 
Creating table auth_group_permissions 
Creating table auth_group 
Creating table auth_user_user_permissions 
Creating table auth_user_groups 
Creating table auth_user 
Creating table django_content_type 
Creating table django_session 
Creating table django_site 
Creating table django_admin_log 
Traceback (most recent call last): 
    File "manage.py", line 10, in <module> 
    execute_from_command_line(sys.argv) 
    File "/app/lib/python2.7/site-packages/django/core/management/__init__.py", line 443, in execute_from_command_line 
    utility.execute() 
    File "/app/lib/python2.7/site-packages/django/core/management/__init__.py", line 382, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "/app/lib/python2.7/site-packages/django/core/management/base.py", line 196, in run_from_argv 
    self.execute(*args, **options.__dict__) 
    File "/app/lib/python2.7/site-packages/django/core/management/base.py", line 232, in execute 
    output = self.handle(*args, **options) 
    File "/app/lib/python2.7/site-packages/django/core/management/base.py", line 371, in handle 
    return self.handle_noargs(**options) 
    File "/app/lib/python2.7/site-packages/django/core/management/commands/syncdb.py", line 91, in handle_noargs 
    sql, references = connection.creation.sql_create_model(model, self.style, seen_models) 
    File "/app/lib/python2.7/site-packages/django/db/backends/creation.py", line 44, in sql_create_model 
    col_type = f.db_type(connection=self.connection) 
    File "/app/lib/python2.7/site-packages/django/contrib/gis/db/models/fields.py", line 200, in db_type 
    return connection.ops.geo_db_type(self) 
AttributeError: 'DatabaseOperations' object has no attribute 'geo_db_type' 

更新:我跟着GeoDjango tutorialHeroku/Django tutorial,并建立了一个简单的应用程序,我开发的机器上工作。我使用custom GeoDjango buildpack将它推送到Heroku,并尝试了syncdb,但得到相同的错误。这是Django/GeoDjango,Heroku还是buildpack的问题?我的开发环境使用PostgreSQL 9.1和PostGIS 2.0,但Heroku使用9.0.9和1.5,这可能是问题吗?

回答

-1

buildpack是这里的主要罪魁祸首。我没有使用Heroku's buildpack page上列出的GeoDjango buildpack,而是使用了最近更新的one of it's forks

而且,当我做了git push heroku master,Heroku上创建应用程序的一个开发数据库,​​当我做了执行syncdb,DATABASES设置被忽略和Heroku上尝试使用开发数据库 ,而不是...显然是问题,因为开发数据库没有/不能安装PostGIS。所以我在用git push(与correct buildpack)创建它之后销毁了开发数据库,​​然后运行syncdb并运行。

+0

我仍然在使用自定义生成包后出现此错误。 – limovala

+6

虽然问题是Heroku特定的,但标题相当一般。如果Django DATABASES ENGINE没有设置为django.contrib.gis.db.backends.postgis –

42

的OP是使用GeoDjango内置buildpack,但如果有人送过来使用Geo buildpackdj_database_url像我,在settings.py不要忘记最后一行:

import dj_database_url 
DATABASES['default'] = dj_database_url.config() 
DATABASES['default']['ENGINE'] = 'django.contrib.gis.db.backends.postgis' 
+0

,也会出现问题,谢谢!这对我来说很完美 – frankV

+1

今天早些时候遇到了这个,感谢修复! – joemeilinger

2

这个职位是旧的,但我只是想分享我对这个问题的答案。我正在使用Dj数据库包,并且我不知道使用PostGIS时连接URL是不同的。 PostGIS的连接字符串是postgis://USER:[email protected]:PORT/NAME

希望这可以帮助某人。

13

我试图运行与测试数据库集测试,如因此,当这个错误:

if 'test' in sys.argv: 
    DATABASES = { 
     'default': { 
      'ENGINE': 'django.db.backends.sqlite3', 
      'NAME': '_testdb', 
     } 
    } 

问题是,该sqlite3的DatabaseOperations对象没有属性geo_db_type(如标题这篇文章的建议)。

我的解决办法是到后端变更为SQLite的相当于GIS引擎:

 'ENGINE': 'django.contrib.gis.db.backends.spatialite' 

参见GeoDjango内置安装Django文档的所有可能的后端,安装说明:https://docs.djangoproject.com/en/1.9/ref/contrib/gis/install/#spatial-database

0

我忘了settings.py中注释掉数据库设置进一步下跌:

# Update database configuration with $DATABASE_URL. 
#db_from_env = dj_database_url.config(conn_max_age=500) 
#DATABASES['default'].update(db_from_env) 

这些线被覆盖的设置,我已添加以上