jazzband / django-configurations

A helper for organizing Django project settings by relying on well established programming patterns.
https://django-configurations.readthedocs.io/
BSD 3-Clause "New" or "Revised" License
1.09k stars 145 forks source link

Cannot determine PostGIS version for database #67

Closed ldgarcia closed 9 years ago

ldgarcia commented 10 years ago

I'm not sure if this is a bug, please close it if it ain't. I put it here to serve as documentation, in case anyone has the same problem.

Currently using Postgres 9.3 and Postgis 2.1. I had to put the version explicitly in my settings file:

   # Actual value defined in environment variable
    DATABASES = values.DatabaseURLValue('postgis://localhost/appdb')
    POSTGIS_VERSION = (2, 1)

Otherwise, I would get this error:

django.core.exceptions.ImproperlyConfigured: Cannot determine PostGIS version for database "appdb". GeoDjango requires at least PostGIS version 1.3. Was the database created from a spatial database template?

Full traceback:

Traceback (most recent call last):
  File "manage.py", line 11, in <module>
    execute_from_command_line(sys.argv)
  File "/home/user/app/venv/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 399, in execute_from_command_line
    utility.execute()
  File "/home/user/app/venv/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 392, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/user/app/venv/local/lib/python2.7/site-packages/django/core/management/base.py", line 242, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/home/user/app/venv/local/lib/python2.7/site-packages/django/core/management/base.py", line 280, in execute
    translation.activate('en-us')
  File "/home/user/app/venv/local/lib/python2.7/site-packages/django/utils/translation/__init__.py", line 130, in activate
    return _trans.activate(language)
  File "/home/user/app/venv/local/lib/python2.7/site-packages/django/utils/translation/trans_real.py", line 188, in activate
    _active.value = translation(language)
  File "/home/user/app/venv/local/lib/python2.7/site-packages/django/utils/translation/trans_real.py", line 177, in translation
    default_translation = _fetch(settings.LANGUAGE_CODE)
  File "/home/user/app/venv/local/lib/python2.7/site-packages/django/utils/translation/trans_real.py", line 159, in _fetch
    app = import_module(appname)
  File "/home/user/app/venv/local/lib/python2.7/site-packages/django/utils/importlib.py", line 40, in import_module
    __import__(name)
  File "/home/user/app/venv/local/lib/python2.7/site-packages/django/contrib/admin/__init__.py", line 6, in <module>
    from django.contrib.admin.sites import AdminSite, site
  File "/home/user/app/venv/local/lib/python2.7/site-packages/django/contrib/admin/sites.py", line 4, in <module>
    from django.contrib.admin.forms import AdminAuthenticationForm
  File "/home/user/app/venv/local/lib/python2.7/site-packages/django/contrib/admin/forms.py", line 6, in <module>
    from django.contrib.auth.forms import AuthenticationForm
  File "/home/user/app/venv/local/lib/python2.7/site-packages/django/contrib/auth/forms.py", line 17, in <module>
    from django.contrib.auth.models import User
  File "/home/user/app/venv/local/lib/python2.7/site-packages/django/contrib/auth/models.py", line 48, in <module>
    class Permission(models.Model):
  File "/home/user/app/venv/local/lib/python2.7/site-packages/django/db/models/base.py", line 96, in __new__
    new_class.add_to_class('_meta', Options(meta, **kwargs))
  File "/home/user/app/venv/local/lib/python2.7/site-packages/django/db/models/base.py", line 264, in add_to_class
    value.contribute_to_class(cls, name)
  File "/home/user/app/venv/local/lib/python2.7/site-packages/django/db/models/options.py", line 124, in contribute_to_class
    self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())
  File "/home/user/app/venv/local/lib/python2.7/site-packages/django/db/__init__.py", line 34, in __getattr__
    return getattr(connections[DEFAULT_DB_ALIAS], item)
  File "/home/user/app/venv/local/lib/python2.7/site-packages/django/db/utils.py", line 199, in __getitem__
    conn = backend.DatabaseWrapper(db, alias)
  File "/home/user/app/venv/local/lib/python2.7/site-packages/django/contrib/gis/db/backends/postgis/base.py", line 11, in __init__
    self.ops = PostGISOperations(self)
  File "/home/user/app/venv/local/lib/python2.7/site-packages/django/contrib/gis/db/backends/postgis/operations.py", line 158, in __init__
    if self.spatial_version < (1, 3, 4):
  File "/home/user/app/venv/local/lib/python2.7/site-packages/django/utils/functional.py", line 49, in __get__
    res = instance.__dict__[self.func.__name__] = self.func(instance)
  File "/home/user/app/venv/local/lib/python2.7/site-packages/django/contrib/gis/db/backends/postgis/operations.py", line 258, in spatial_version
    'template?' % self.connection.settings_dict['NAME']
django.core.exceptions.ImproperlyConfigured: Cannot determine PostGIS version for database "appdb". GeoDjango requires at least PostGIS version 1.3. Was the database created from a spatial database template?
jezdez commented 9 years ago

Sorry, but I can't reproduce this locally, I assume it has something to do with your database setup.