невозможно выполнить запросы RDS на героку

Я без проблем могу получить доступ к своей базе данных RDS postresql на локальном компьютере.

settings.py

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.postgresql_psycopg2',
    'NAME': 'xxxxxxx',
    'USER': 'XXXXXXXX',
    'PASSWORD': 'XXXXXXXX',
    'HOST': 'XXXXXXrds.amazonaws.com',
    'PORT': '5432',
}

Я отправил это в Heroku и получил ProgrammingError в /saferdb/query/

В оболочке manage.py на героку я попытался получить доступ к базе данных:

>>> from saferdb.models import Question
>>> q = Question.objects.all()
>>> q.count()

получил следующую ошибку:

Traceback (most recent call last):
  File "/app/.heroku/python/lib/python3.6/site-packages/django/db/backends/utils.py", line 85, in _execute
    return self.cursor.execute(sql, params)
psycopg2.ProgrammingError: relation "saferdb_question" does not exist
LINE 1: SELECT COUNT(*) AS "__count" FROM "saferdb_question"
                                          ^


The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/app/.heroku/python/lib/python3.6/site-packages/django/db/models/query.py", line 387, in count
    return self.query.get_count(using=self.db)
  File "/app/.heroku/python/lib/python3.6/site-packages/django/db/models/sql/query.py", line 491, in get_count
    number = obj.get_aggregation(using, ['__count'])['__count']
  File "/app/.heroku/python/lib/python3.6/site-packages/django/db/models/sql/query.py", line 476, in get_aggregation
    result = compiler.execute_sql(SINGLE)
  File "/app/.heroku/python/lib/python3.6/site-packages/django/db/models/sql/compiler.py", line 1063, in execute_sql
    cursor.execute(sql, params)
  File "/app/.heroku/python/lib/python3.6/site-packages/django/db/backends/utils.py", line 100, in execute
    return super().execute(sql, params)
  File "/app/.heroku/python/lib/python3.6/site-packages/django/db/backends/utils.py", line 68, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "/app/.heroku/python/lib/python3.6/site-packages/django/db/backends/utils.py", line 77, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "/app/.heroku/python/lib/python3.6/site-packages/django/db/backends/utils.py", line 85, in _execute
    return self.cursor.execute(sql, params)
  File "/app/.heroku/python/lib/python3.6/site-packages/django/db/utils.py", line 89, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/app/.heroku/python/lib/python3.6/site-packages/django/db/backends/utils.py", line 85, in _execute
    return self.cursor.execute(sql, params)
django.db.utils.ProgrammingError: relation "saferdb_question" does not exist
LINE 1: SELECT COUNT(*) AS "__count" FROM "saferdb_question"
                                          ^

person Lev    schedule 30.01.2018    source источник


Ответы (2)


У меня была аналогичная проблема, также для приложения Django on Heroku. Я использовал heroku-django-template для создания своего приложения. . В settings.py база данных default затирается. с помощью переменной среды DATABASE_URL.

Вы можете либо отключить это в settings.py, либо установить для env var правильное значение.

person Milan Cermak    schedule 09.02.2018

Ошибка связана с тем, что в базе данных не существует таблицы, это означает, что вам необходимо перенести модели базы данных. Для дальнейшего ознакомления прочитайте миграцию django здесь

Миграция базы данных в хероку делается таким образом, укажите строку в файле Procfile.

release: python manage.py migrate
web: gunicorn col.wsgi --log-file -

Поэтому всякий раз, когда вы развертываете новый код, heroku автоматически переносит модели БД. Для получения дополнительной информации проверьте здесь. дайте мне знать, если это работает.

person Sakthi Panneerselvam    schedule 30.01.2018
comment
Я сделал то, что вы сказали, и теперь ошибка программирования исчезла. но я все еще не получаю никаких данных от RDS. Я неправильно настроил? - person Lev; 30.01.2018
comment
Проверьте, создана ли таблица. - person Sakthi Panneerselvam; 30.01.2018
comment
Я думаю, что они созданы. Я запустил оболочку heroku manage.py и смог запустить команду sql, но записей нет. - person Lev; 30.01.2018
comment
Если нет записей, что вы получите. Попробуйте вставить некоторые данные и дайте мне знать. - person Sakthi Panneerselvam; 30.01.2018
comment
Я не могу просто вставить некоторые данные, необходимые для доступа к данным, размещенным в Amazon RDS. - person Lev; 30.01.2018
comment
Можете ли вы уточнить, что именно вы хотите? - person Sakthi Panneerselvam; 30.01.2018
comment
Я запускаю базу данных postgresql на Amazon RDS. Мне нужно запрашивать данные из нее с помощью моего приложения heroku. - person Lev; 30.01.2018
comment
Когда вы запрашиваете, что вы получаете пустой список или ошибку? - person Sakthi Panneerselvam; 30.01.2018
comment
Давайте продолжим это обсуждение в чате. - person Sakthi Panneerselvam; 30.01.2018