django - 向heroku

时间:2017-09-18 06:49:43

标签: python django heroku

我正在努力在heroku上部署我的应用程序。主要是由于数据库配置。

这是settings.py文件的底部,

import dj_database_url

DATABASES = { 'default': dj_database_url.config() }

try:
    from .local_settings import *
except ImportError:
    pass

这是我的local_settings.py文件,

导入操作系统 BASE_DIR = os.path.dirname(os.path.dirname( file ))

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'test',
        'USER': 'test',
        'PASSWORD': 'postgres',
        'HOST': 'localhost',
        'PORT': 5432,
    }  
}

我可以成功运行heroku local web

但是当我跑,heroku run python manage.py migrate时,它给了我错误,

django.db.utils.OperationalError: could not connect to server: Connection refused
    Is the server running on host "localhost" (127.0.0.1) and accepting
    TCP/IP connections on port 5432?

当我跑步时,heroku run python manage.py shell

然后运行

>>> import dj_database_url
>>> dj_database_url.config()

我收到字典,向我提供有关数据库的完整信息。

问题出在哪里?

2 个答案:

答案 0 :(得分:2)

不应部署local_settings文件。它仅供本地使用,因此得名。你应该把它从你的git repo中排除。

答案 1 :(得分:1)

首先尝试从local_settings.py导入设置,然后更改DATABASES设置

import dj_database_url
try:
    from .local_settings import *
except ImportError:
    pass

DATABASES = { 'default': dj_database_url.config() }

您已在文件中定义了DATABASES变量,但在导入local_settings.py时,您的DATABASES配置会被开发值覆盖。您应首先进行导入,然后更改DATABASES选项。

就个人而言,我建议您应保留base_settings.py以包含除数据库以外的所有设置,然后将其导入heroku_settings.py,而不是导入整个local_settings }。

保留base_settingsdevelopment_settingsheroku_settings(或production_settings)可以更轻松地处理部署。