1. ホーム
  2. django

syncdb を実行する際に 'DatabaseOperations' オブジェクトに 'geo_db_type' 属性がないというエラーが発生する

2023-08-23 23:02:41

質問

私は heroku run python manage.py syncdb を Heroku 上の GeoDjango アプリで実行しようとしていますが、以下のエラーが発生します。

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

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

どのように解決するのですか?

ここでは、ビルドパックが主な原因でした。にリストされている GeoDjango のビルドパックを使う代わりに Heroku のビルドパックページ にある GeoDjango のビルドパックを使う代わりに そのフォークの一つ を使いました。

また、私が git push heroku master を実行すると、Heroku はアプリの dev データベースを作成し、syncdb を実行すると。 DATABASES の設定は無視されます。 で、Herokuは代わりにdevデータベースを使用しようとします。 を使おうとします。開発用データベースにはPostGISがインストールされていないので、明らかに問題です。そこで、開発用データベースを git push で作成した後、開発用データベースを破棄しました (このとき 正しいビルドパック で)、syncdbを実行したところ、うまくいきました。