J'essaie d'exécuter heroku run python manage.py syncdb
sur mon application GeoDjango sur Heroku, mais le message d'erreur suivant s'affiche:
AttributeError: l'objet 'DatabaseOperations' n'a pas d'attribut 'geo_db_type'
Tousdemesrecherches ont donné la même solution: assurez-vous d'utiliser Django.contrib.gis.db.backends.postgis
comme moteur de base de données. Le plus drôle est que je le fais déjà (et j'ai aussi Django.contrib.gis
dans INSTALLED_APPS
):
settings.py
DATABASES = {
'default': {
'ENGINE': 'Django.contrib.gis.db.backends.postgis',
'NAME': '...',
'Host': '...',
'PORT': ...,
'USER': '...',
'PASSWORD': '...'
}
}
INSTALLED_APPS = (
...,
'Django.contrib.gis',
)
Y a-t-il autre chose qui me manque? Toute aide est grandement appréciée. Ci-dessous 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 <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'
Mise à jour : J'ai suivi le didacticiel GeoDjango et Didacticiel Heroku/Django , et ai construit une application simple qui fonctionne sur ma machine de développement. Je l'ai poussé vers Heroku à l'aide d'un build personnalisé GeoDjango , et j'ai essayé syncdb, mais j'obtiens 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, est-ce le problème?
Le PO utilisait le buildpack GeoDjango, mais au cas où quelqu'un arriverait ici en utilisant 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.contrib.gis.db.backends.postgis'
dj_database_url
supporte directement PostGIS. Vous pouvez vous passer de la dernière ligne du code ci-dessus si vous pouvez modifier l'URL de votre base de données pour qu'elle commence par postgis
.
J'ai eu cette erreur en essayant d'exécuter des tests avec la base de test test comme ceci:
if 'test' in sys.argv:
DATABASES = {
'default': {
'ENGINE': 'Django.db.backends.sqlite3',
'NAME': '_testdb',
}
}
Problème étant que l'objet sqlite3 DatabaseOperations
ne possède pas l'attribut geo_db_type
(comme le titre le titre de ce message le suggère).
Ma solution a été de changer le backend en un moteur SIG équivalent à sqlite:
'ENGINE': 'Django.contrib.gis.db.backends.spatialite'
Voir la documentation Django sur l'installation de geodjango pour tous les backends possibles, avec les instructions d'installation: https://docs.djangoproject.com/en/1.9/ref/contrib/gis/install/#spatial-database
Cet article est vieux mais je voulais juste partager ma réponse à ce problème. J'utilise le package Dj Database, et je ne savais pas que l'URL de connexion était différente avec PostGIS. La chaîne de connexion pour PostGIS est postgis://USER:PASSWORD@Host:PORT/NAME
J'espère que ça aide quelqu'un.
pour moi aidé
1) ajoutez 'Django.contrib.gis',
à INSTALLED_APPS
2) changer de
DATABASES = {
'default': {
'ENGINE': 'Django.db.backends.mysql',
à
DATABASES = {
'default': {
'ENGINE': 'Django.contrib.gis.db.backends.mysql',
J'utilise l'exemple d'application Python sur stack cedar 14 et le pack de construction Heroko heroku/python avec PostGIS. Le problème suivant était que les paramètres de ma base de données ont été écrasés par le mauvais moteur de base de données, ce qui a provoqué heroku run python manage.py migrate
échouer avec l'erreur ci-dessus . Le simple fait d'ajouter le moteur dans les paramètres ne changerait rien . Après quelques recherches, j'ai découvert qu'il s'agissait de l'appel à Django_heroku.settings(locals())
dans la dernière ligne si mon settings.py qui revenait à mon changements.
Je l'ai corrigé en écrasant à nouveau le moteur comme ceci en ajoutant une ligne par la suite:
Django_heroku.settings(locals())
DATABASES['default']['ENGINE'] = 'Django.contrib.gis.db.backends.postgis'
J'avais le même problème et je devais changer:
'ENGINE': 'Django.db.backends.postgresql_psycopg2',
à:
'ENGINE': 'Django.contrib.gis.db.backends.postgis',