2012-09-21 70 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) 

這些線被覆蓋的設置,我已添加以上