77

heroku run python manage.py syncdbHeroku で GeoDjango アプリを実行しようとしていますが、次のエラーが発生します。

AttributeError: 'DatabaseOperations' オブジェクトに属性 'geo_db_type' がありません

私の調査のすべて 同じ解決策をもたらしました。データベース エンジンとして使用するようにしてください。面白いことに、私はすでにこれを行っています(そして、私も持っています) : django.contrib.gis.db.backends.postgisdjango.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 チュートリアルHeroku/Django チュートリアルに従い、開発マシンで動作する簡単なアプリを作成しました。カスタム GeoDjango buildpackを使用して Heroku にプッシュし、syncdb を試しましたが、同じエラーが発生しました。これは Django/GeoDjango、Heroku、またはビルドパックの問題ですか? 私の開発環境は PostgreSQL 9.1 と PostGIS 2.0 を使用していますが、Heroku は 9.0.9 と 1.5 を使用しています。それが問題でしょうか?

4

10 に答える 10

93

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.

于 2014-01-23T19:28:50.957 に答える
36

テストデータベースを次のように設定してテストを実行しようとすると、このエラーが発生しました。

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

問題は、sqlite3DatabaseOperationsオブジェクトに属性がないことですgeo_db_type(この投稿のタイトルが示すように)。

私の解決策は、バックエンドを sqlite と同等の GIS エンジンに変更することでした。

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

可能なすべてのバックエンドについては、GeoDjango のインストールに関する Django ドキュメントを参照してください。

于 2016-06-15T03:44:43.560 に答える
12

この投稿は古いですが、この問題に対する私の答えを共有したかっただけです。Dj Databaseパッケージを使っていて、PostGISだと接続URLが違うとは知りませんでした。PostGIS の接続文字列は次のとおりです。postgis://USER:PASSWORD@HOST:PORT/NAME

これが誰かに役立つことを願っています。

于 2016-03-29T05:07:46.307 に答える
-2

ここでの主な原因はビルドパックでした。Heroku のビルドパック ページにリストされている GeoDjango ビルドパックを使用する代わりに、最近更新されたフォークの 1 つを使用しました。

また、私が実行するgit push heroku masterと、Heroku はアプリ用の dev データベースを作成し、syncdb を実行すると、私のDATABASES設定は無視され、Heroku は代わりに dev データベースを使用しようとします...明らかに問題です。 PostGIS をインストールできません。git pushしたがって、 (正しい buildpackを使用して)作成された後に dev データベースを破棄し、syncdb を実行すると動作します。

于 2012-09-28T16:25:35.420 に答える