2012-09-21 7 views
34

Sto tentando di eseguire heroku run python manage.py syncdb sul mio app GeoDjango su Heroku, ma ottengo il seguente errore:Ottenere oggetto 'DatabaseOperations' non ha nessun errore attributo 'geo_db_type' quando si fa uno syncdb

AttributeError: 'DatabaseOperations' oggetto non ha attributo 'geo_db_type'

Allofmyresearch ha dato la stessa soluzione: assicuratevi di usare django.contrib.gis.db.backends.postgis come il motore di database. La cosa divertente è che sto già facendo questo (e ho anche django.contrib.gis in INSTALLED_APPS):

settings.py 

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

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

C'è qualcos'altro che mi manca? Ogni aiuto è molto apprezzato, qui di seguito è la traccia di errore completo per riferimento:

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' 

Aggiornamento: Ho seguito il GeoDjango tutorial e Heroku/Django tutorial, e costruito una semplice applicazione che funziona sulla mia macchina dev. L'ho spinto a Heroku usando un custom GeoDjango buildpack e ho provato syncdb, ma ho ottenuto lo stesso errore. Si tratta di un problema con Django/GeoDjango, Heroku o il buildpack? Il mio ambiente di sviluppo utilizza PostgreSQL 9.1 e PostGIS 2.0, ma Heroku utilizza 9.0.9 e 1.5, potrebbe essere questo il problema?

risposta

-1

Il buildpack era il colpevole principale qui. Invece di usare il buildpack GeoDjango elencato su Heroku's buildpack page, ho utilizzato one of it's forks che è stato aggiornato più di recente.

Inoltre, quando faccio una git push heroku master, Heroku crea un database dev per l'applicazione, e quando faccio una syncdb, mia impostazione DATABASES viene ignorata e Heroku tenta di utilizzare il database dev invece ... ovviamente un problema, perché i database di sviluppo non hanno/non possono avere PostGIS installato. Così ho distrutto il database dev dopo che è stato creato con lo git push (con il correct buildpack), quindi eseguito syncdb e funziona.

+0

sto ancora ricevendo questo errore dopo aver usato il pacchetto di build personalizzato. – limovala

+6

Mentre la domanda è specifica per Heroku, il titolo è abbastanza generale. Il problema può anche sorgere se Django DATABASES ENGINE non è impostato su django.contrib.gis.db.backends.postgis –

42

L'OP è stato utilizzando il buildpack GeoDjango, ma nel caso qualcuno arriva qui con Geo buildpack e dj_database_url come ero, in settings.py non dimenticare l'ultima riga:

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

grazie! questo ha funzionato perfettamente per me – frankV

+1

ha funzionato in questo prima oggi, grazie per la correzione! – joemeilinger

2

Questo post è vecchio ma Volevo solo condividere la mia risposta a questo problema. Sto usando il pacchetto Dj Database e non sapevo che l'URL della connessione fosse diverso quando si utilizza PostGIS. La stringa di connessione per PostGIS è postgis://USER:[email protected]:PORT/NAME

Spero che questo aiuti qualcuno.

13

ho ottenuto questo errore quando si tenta di eseguire i test con il set di db di test in questo modo:

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

problema è che l'oggetto sqlite3 DatabaseOperations non ha l'attributo geo_db_type (come il titolo di questo post suggerisce).

La mia soluzione era quella di cambiare il backend al SQLite motore GIS equivalente:

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

Vedi la documentazione Django sull'installazione geodjango per tutte le possibili backend, con istruzioni per l'installazione: https://docs.djangoproject.com/en/1.9/ref/contrib/gis/install/#spatial-database

0

ho dimenticato di commentare le impostazioni db, più in basso nella 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) 

Queste linee erano priorità rispetto alle impostazioni che ho avevo aggiunto sopra

Problemi correlati