【问题标题】:Running PostGIS with Django on Heroku在 Heroku 上使用 Django 运行 PostGIS
【发布时间】:2018-04-22 19:34:32
【问题描述】:

尝试在 Heroku 上运行 GeoDjango 应用程序,这是一项真正的工作。在经历了各种问题之后,我遇到了一个我似乎无法摆脱的问题。

  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 解释

在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'}

任何帮助表示赞赏。我知道关于这个问题的各种类似的 stackoverflow 帖子,但是我研究过的所有解决方案都没有解决这个问题——所以再问一次。

【问题讨论】:

    标签: python-3.x heroku postgis geodjango heroku-postgres


    【解决方案1】:

    Geodjango 需要连接“postgis://...”,但 heroku 将 db 设置更改为“postgres://”。因此,如果您将 DATABASES 变量移动到 settings.py 的底部,问题就解决了。快乐的黑客:)

    django_heroku.settings(locals())
    
    DATABASES = {
        'default': {
            'ENGINE': 'django.contrib.gis.db.backends.postgis',
            'NAME': '*',
            'USER': '*',
            'PASSWORD': '*',
            'HOST': '*',
            'PORT': '5432',
        },
    }
    

    【讨论】:

    • 上帝保佑你!你拯救了我的一天。
    猜你喜欢
    • 2012-06-05
    • 2012-02-14
    • 1970-01-01
    • 2018-06-21
    • 2017-09-20
    • 2012-11-22
    • 2016-06-20
    • 1970-01-01
    • 2017-11-05
    相关资源
    最近更新 更多