【问题标题】:Django Heroku postgres connectivity errorDjango Heroku postgres 连接错误
【发布时间】:2018-07-13 08:09:39
【问题描述】:

我正在尝试在this guide 的指导下将一个基本的 Wagtail Django 站点 (pip install wagtail) 推送到 Heroku,并得到 the Heroku docs 的指导,我遇到了一个非常常见的 postgres 连接错误(如下)。我可以从仪表板上看到 Heroku 正在提供实时数据库,我可以使用 heroku pq:psql 访问它。

项目在本地运行,当我运行 heroku local 时也运行。

我的 `project/app/settings/production.py' 已按照建议设置:

import os

env = os.environ.copy()
SECRET_KEY = env['SECRET_KEY']

from __future__ import absolute_import, unicode_literals

from .base import *

DEBUG = False

try:
    from .local import *
except ImportError:
    pass

# Parse database configuration from $DATABASE_URL
import dj_database_url
DATABASES = {'default': dj_database_url.config(default='postgres://localhost')}
print('check')
print(DATABASES)

# 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 = ['*']

Procfile(位于 repo 的根目录)

web: gunicorn myproj.wsgi:application --log-file -

myproj/wsgi.py

from __future__ import absolute_import, unicode_literals

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproj.settings.dev")

application = get_wsgi_application()

我得到的错误:

  File "/app/.heroku/python/lib/python3.6/site-packages/django/db/backends/base/base.py", line 213, in ensure_connection
    self.connect()
  File "/app/.heroku/python/lib/python3.6/site-packages/django/db/backends/base/base.py", line 189, in connect
    self.connection = self.get_new_connection(conn_params)
  File "/app/.heroku/python/lib/python3.6/site-packages/django/db/backends/postgresql/base.py", line 176, in get_new_connection
    connection = Database.connect(**conn_params)
  File "/app/.heroku/python/lib/python3.6/site-packages/psycopg2/__init__.py", line 130, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
django.db.utils.OperationalError: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

谁能帮忙?

【问题讨论】:

  • 那个设置文件有一些打印语句;它们在日志中可见吗?如果不是,则表明该文件根本没有被拾取。
  • 是的,我把它们放在那里是为了检查,但我不清楚我应该在哪里看到它们,即在哪里自然会调用设置。 heroku logs 没有显示完整的日志记录信息,并且我的错误所在的回溯(我发布了一些)没有提及尝试访问设置。我要去哪里看?谢谢!
  • 我刚刚注意到您的设置名为 production.py。你是如何告诉 Django 使用该文件的?显示您的 Procfile 和 wsgi.py。
  • 我已将这些添加到我的问题中。其中很多是 Wagtail 样板:pypi.org/project/wagtail

标签: python django postgresql heroku wagtail


【解决方案1】:

您的 wsgi 文件指向您的开发设置;生产的根本没有被使用。

使用setdefault 设置环境变量意味着如果已经设置了现有值,则将优先使用它。因此,您应该运行 heroku config:set DJANGO_SETTINGS_MODULE=myproj.settings.production 来设置该值。

【讨论】:

    猜你喜欢
    • 2013-05-01
    • 2012-10-15
    • 2020-07-14
    • 2023-03-03
    • 1970-01-01
    • 2012-07-09
    • 2016-08-17
    • 1970-01-01
    相关资源
    最近更新 更多