HerokuのGeoDjangoアプリでheroku run python manage.py syncdb
を実行しようとしていますが、次のエラーが表示されます。
AttributeError: 'DatabaseOperations'オブジェクトに属性 'geo_db_type'がありません
Allofmyresearch は同じ解決策をもたらしました:データベースとしてDjango.contrib.gis.db.backends.postgis
を使用するようにしてくださいエンジン。面白いのは、私はすでにこれをやっているということです(そして、Django.contrib.gis
にはINSTALLED_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チュートリアル および Heroku/Djangoチュートリアル に従い、シンプルなアプリを構築しましたそれは私の開発マシンで動作します。 カスタムGeoDjangoビルドパック を使用してHerokuにプッシュし、syncdbを試しましたが、同じエラーが発生しました。これはDjango/GeoDjango、Heroku、またはビルドパックの問題ですか?私の開発環境はPostgreSQL 9.1とPostGIS 2.0を使用していますが、Herokuは9.0.9と1.5を使用していますが、それが問題になる可能性はありますか?
OPはGeoDjangoビルドパックを使用していましたが、誰かが Geoビルドパック およびdj_database_url
私のように、settings.py
最後の行を忘れないでください:
import dj_database_url
DATABASES['default'] = dj_database_url.config()
DATABASES['default']['ENGINE'] = 'Django.contrib.gis.db.backends.postgis'
dj_database_url
直接サポート PostGIS。データベースURLをpostgis
で始まるように変更できる場合、上記のコードの最後の行なしで実行できます。
Test dbを次のように設定してテストを実行しようとすると、このエラーが発生しました。
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'
可能なすべてのバックエンドについては、geodangoのインストールに関するDjangoのドキュメントを参照してください。インストール手順はこちらをご覧ください。 https://docs.djangoproject.com/en/1.9/ref/contrib/gis/ install /#spatial-database
私は同じ問題を抱えていて、変更しなければなりませんでした:
'ENGINE': 'Django.db.backends.postgresql_psycopg2',
に:
'ENGINE': 'Django.contrib.gis.db.backends.postgis',
この投稿は古いですが、この問題に対する私の答えを共有したかっただけです。私はDjデータベースパッケージを使用していますが、PostGISを使用すると接続URLが異なることを知りませんでした。 PostGISの接続文字列はpostgis://USER:PASSWORD@Host:PORT/NAME
これが誰かを助けることを願っています。
助けてくれた
1)'Django.contrib.gis',
をINSTALLED_APPS
に追加します
2)変更
DATABASES = {
'default': {
'ENGINE': 'Django.db.backends.mysql',
に
DATABASES = {
'default': {
'ENGINE': 'Django.contrib.gis.db.backends.mysql',
Python3で同じエラーが発生しています:
File "/app/.heroku/python/lib/python3.6/site-packages/Django/db/models/fields/__init__.py", line 673, in db_parameters
type_string = self.db_type(connection)
File "/app/.heroku/python/lib/python3.6/site-packages/Django/contrib/gis/db/models/fields.py", line 105, in db_type
return connection.ops.geo_db_type(self)
AttributeError: 'DatabaseOperations' object has no attribute 'geo_db_type'
適切に使用しましたdj-database-url
エンジンを設定しますが、まだエラーが表示されます
Pyで解釈されるため、dbセットアップを出力するためのprintステートメントを追加しました
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.contrib.gis.db.backends.postgis')
print(DATABASES['default'])
これは、herokuサーバーがDATABASES['default']
資格情報。エンジンが適切に設定されているようです。
{'NAME': 'name', 'USER': 'usr', 'PASSWORD': 'pw', 'Host': 'herokuec2Host.amazonaws.com', 'PORT': 5432, 'CONN_MAX_AGE': 0, 'ENGINE': 'Django.contrib.gis.db.backends.postgis'}
Pythonスタック上のサンプルアプリケーションcedar 14および通常のHerokoビルドパックheroku/pythonをPostGISで使用しており、同じ問題が発生しました。データベース設定が間違ったDBエンジンで上書きされたため、上記のエラーで_heroku run python manage.py migrate
_が失敗しました。設定にエンジンを追加しても何も変わりません。調査の結果、Django_heroku.settings(locals())
の呼び出しであることがわかりました。変更を元に戻すsettings.pyの場合、最後の行に。
後で行を追加して、このようにエンジンを再度上書きすることで修正しました。
_Django_heroku.settings(locals())
DATABASES['default']['ENGINE'] = 'Django.contrib.gis.db.backends.postgis'
_