Obtenir l’object ‘DatabaseOperations’ n’a pas d’erreur d’atsortingbut ‘geo_db_type’ lors d’une synchronisation

J’essaie de lancer heroku run python manage.py syncdb sur mon application GeoDjango sur Heroku, mais j’obtiens l’erreur suivante:

AtsortingbuteError: L’object ‘DatabaseOperations’ n’a pas d’atsortingbut ‘geo_db_type’

Toutes mes recherches ont abouti à la même solution: veillez à utiliser django.consortingb.gis.db.backends.postgis comme moteur de firebase database. Ce qui est drôle, c’est que je le fais déjà (et j’ai aussi django.consortingb.gis dans INSTALLED_APPS ):

 settings.py DATABASES = { 'default': { 'ENGINE': 'django.consortingb.gis.db.backends.postgis', 'NAME': '...', 'HOST': '...', 'PORT': ..., 'USER': '...', 'PASSWORD': '...' } } INSTALLED_APPS = ( ..., 'django.consortingb.gis', ) 

Y a-t-il autre chose qui me manque? Toute aide est grandement appréciée, ci-dessous est la trace d’erreur complète pour référence:

 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  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/consortingb/gis/db/models/fields.py", line 200, in db_type return connection.ops.geo_db_type(self) AtsortingbuteError: 'DatabaseOperations' object has no atsortingbute 'geo_db_type' 

Mise à jour : J’ai suivi le didacticiel GeoDjango et le tutoriel Heroku / Django , et créé une application simple qui fonctionne sur ma machine de développement. Je l’ ai envoyé à Heroku en utilisant un buildpack GeoDjango personnalisé , et j’ai essayé syncdb, mais j’ai eu la même erreur. Est-ce un problème avec Django / GeoDjango, Heroku ou le buildpack? Mon environnement de développement utilise PostgreSQL 9.1 et PostGIS 2.0, mais Heroku utilise 9.0.9 et 1.5, cela pourrait-il être le problème?

L’OP utilisait le buildpack GeoDjango, mais au cas où quelqu’un utiliserait Geo Buildpack et dj_database_url comme je l’étais, dans settings.py n’oubliez pas la dernière ligne:

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

J’ai eu cette erreur en essayant d’exécuter des tests avec la firebase database de test comme suit:

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

Le problème est que l’object sqlite3 DatabaseOperations n’a pas l’atsortingbut geo_db_type (comme le suggère le titre de cet article).

Ma solution consistait à changer le backend en un moteur SIG équivalent à sqlite:

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

Voir les django docs sur l’installation de geodjango pour tous les backends possibles, avec les instructions d’installation: https://docs.djangoproject.com/en/1.9/ref/consortingb/gis/install/#spatial-database

Ce post est ancien mais je voulais juste partager ma réponse à ce problème. J’utilise le package de firebase database Dj et je ne savais pas que l’URL de connexion était différente lors de l’utilisation de PostGIS. La chaîne de connexion pour PostGIS est postgis://USER:PASSWORD@HOST:PORT/NAME

J’espère que cela aide quelqu’un.

En python3, je reçois la même erreur:

  File "/app/.heroku/python/lib/python3.6/site-packages/django/db/models/fields/__init__.py", line 673, in db_parameters type_ssortingng = self.db_type(connection) File "/app/.heroku/python/lib/python3.6/site-packages/django/consortingb/gis/db/models/fields.py", line 105, in db_type return connection.ops.geo_db_type(self) AtsortingbuteError: 'DatabaseOperations' object has no atsortingbute 'geo_db_type' 

J’ai correctement utilisé dj-database-url pour définir le moteur, mais je vois toujours l’erreur

J’ai ajouté une instruction print pour sortir mes configurations de firebase database telles qu’elles sont interprétées par py

Dans 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.consortingb.gis.db.backends.postgis') print(DATABASES['default']) 

Voici l’instruction print qui affiche ce que le serveur heroku interprète comme mes identifiants DATABASES['default'] . Il semble que le moteur soit correctement réglé.

 {'NAME': 'name', 'USER': 'usr', 'PASSWORD': 'pw', 'HOST': 'herokuec2host.amazonaws.com', 'PORT': 5432, 'CONN_MAX_AGE': 0, 'ENGINE': 'django.consortingb.gis.db.backends.postgis'} 

Le buildpack était le principal coupable ici. Au lieu d’utiliser le buildpack GeoDjango répertorié sur la page de compilation d’Heroku , j’ai utilisé une de ses fourches qui a été mise à jour plus récemment.

Aussi, quand je fais un git push heroku master , Heroku crée une firebase database de développement pour l’application, et quand je fais un syncdb, mon paramètre DATABASES est ignoré et Heroku essaie d’utiliser la firebase database de développement à la place. les bases de données ne peuvent / ne peuvent pas avoir PostGIS installé. J’ai donc détruit la firebase database dev après la création de git push (avec le buildpack correct ), puis exécuté syncdb et ça marche.

J’ai oublié de commenter les parameters de la firebase database plus bas dans 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) 

Ces lignes remplaçaient les parameters que j’avais ajoutés ci-dessus