【问题标题】:Heroku+Django+Postgres error: "FATAL: database "python_getting_started" does not exist"Heroku+Django+Postgres 错误:“致命:数据库“python_getting_started”不存在”
【发布时间】:2015-08-29 05:42:11
【问题描述】:

我正在尝试在 Heroku (https://devcenter.heroku.com/articles/getting-started-with-python#introduction) 进行 Python 入门练习。我只是按照说明并使用教程中提供的 git 存储库。但是当我转到使用数据库功能的 Web 应用程序的 /db 页面时,我得到了这个错误跟踪:


Environment:


Request Method: GET
Request URL: http://localhost:5000/db

Django Version: 1.8.1
Python Version: 2.7.5
Installed Applications:
('django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'hello')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'django.middleware.security.SecurityMiddleware')


Traceback:
File "/Users/Lisha/Desktop/Starred_Docs/python-getting-started/venv/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  132.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/Lisha/Desktop/Starred_Docs/python-getting-started/hello/views.py" in db
  14.     greeting.save()
File "/Users/Lisha/Desktop/Starred_Docs/python-getting-started/venv/lib/python2.7/site-packages/django/db/models/base.py" in save
  710.                        force_update=force_update, update_fields=update_fields)
File "/Users/Lisha/Desktop/Starred_Docs/python-getting-started/venv/lib/python2.7/site-packages/django/db/models/base.py" in save_base
  735.         with transaction.atomic(using=using, savepoint=False):
File "/Users/Lisha/Desktop/Starred_Docs/python-getting-started/venv/lib/python2.7/site-packages/django/db/transaction.py" in __enter__
  150.             if not connection.get_autocommit():
File "/Users/Lisha/Desktop/Starred_Docs/python-getting-started/venv/lib/python2.7/site-packages/django/db/backends/base/base.py" in get_autocommit
  286.         self.ensure_connection()
File "/Users/Lisha/Desktop/Starred_Docs/python-getting-started/venv/lib/python2.7/site-packages/django/db/backends/base/base.py" in ensure_connection
  130.                 self.connect()
File "/Users/Lisha/Desktop/Starred_Docs/python-getting-started/venv/lib/python2.7/site-packages/django/db/utils.py" in __exit__
  97.                 six.reraise(dj_exc_type, dj_exc_value, traceback)
File "/Users/Lisha/Desktop/Starred_Docs/python-getting-started/venv/lib/python2.7/site-packages/django/db/backends/base/base.py" in ensure_connection
  130.                 self.connect()
File "/Users/Lisha/Desktop/Starred_Docs/python-getting-started/venv/lib/python2.7/site-packages/django/db/backends/base/base.py" in connect
  119.         self.connection = self.get_new_connection(conn_params)
File "/Users/Lisha/Desktop/Starred_Docs/python-getting-started/venv/lib/python2.7/site-packages/django/db/backends/postgresql_psycopg2/base.py" in get_new_connection
  172.         connection = Database.connect(**conn_params)
File "/Users/Lisha/Desktop/Starred_Docs/python-getting-started/venv/lib/python2.7/site-packages/psycopg2/__init__.py" in connect
  164.     conn = _connect(dsn, connection_factory=connection_factory, async=async)

Exception Type: OperationalError at /db
Exception Value: FATAL:  database "python_getting_started" does not exist

只有当我在本地运行应用程序时才会崩溃; herokuapp.com 上的应用程序运行良好。你知道问题可能是什么吗?非常感谢您的帮助。

【问题讨论】:

  • 从您的设置中显示数据库
  • @madzohan DATABASES {'default': {'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0, 'ENGINE': 'django_postgrespool', 'HOST': 'localhost' , 'NAME': 'python_getting_started', 'OPTIONS': {}, 'PASSWORD': u'********************', 'PORT': '' , 'TEST': {'CHARSET': None, 'COLLATION': None, 'MIRROR': None, 'NAME': None}, 'TIME_ZONE': 'UTC', 'USER': ''}}
  • hm 我没有使用过 django_postgrespool 引擎,但无论如何检查你是否有 python_getting_started 数据库:psql -l | grep '^ python_getting_started\b'
  • 我想我没有数据库,但我只是通过运行“create database python_getting_started;”创建了它。但它没有正确配置,并且它不包含与远程数据库相同的数据。我刚刚意识到,在教程中,如果我将“/db”附加到远程 URL(herokuapp.com 上的应用程序),该功能应该可以工作;它并没有说它应该在本地工作。但是有没有办法让它像远程一样在本地工作?并使用远程数据库而不是本地数据库?
  • python manage.py migrate

标签: python django postgresql heroku


【解决方案1】:
#try to load local_settings.py if it exists
try:
    from .settings_local import *
except Exception as e:
    DATABASES = {
        "default": {
            "ENGINE": "django.db.backends.postgresql_psycopg2",
        }
    }
    import dj_database_url
    DATABASES['default'] = dj_database_url.config()
    # Honor the 'X-Forwarded-Proto' header for request.is_secure()
    SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
    # Allow all host headers
    ALLOWED_HOSTS = ['']

在您的settings.py 附近创建settings_local.py 并在此处声明您的数据库设置

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'python_getting_started',
        'USER': 'some_postgre_user',
        'PASSWORD': 'some_password',
    }
}

如果您没有python_getting_started,显然您必须创建它:

psql postgres
create database python_getting_started;
create user some_postgre_user password 'some_password';
grant all on database python_getting_started to some_postgre_user;
\q

【讨论】:

    猜你喜欢
    • 2012-06-07
    • 2014-12-09
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    • 2013-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多