9

所以我正在关注heroku with django的入门指南。但是,当我运行此命令时:

heroku run python manage.py syncdb

我收到这个错误

psycopg2.OperationalError: could not connect to server: Connection refused
Is the server running on host "localhost" and accepting
TCP/IP connections on port 5432?

我认为这意味着数据库尚未设置......所以我也手动添加了 shared_db 选项:

heroku addons:add shared-database:5mb

但是..我仍然得到同样的错误。是什么赋予了?

4

5 回答 5

8

编辑:

正如@mipadi 在这里指出的那样(http://stackoverflow.com/questions/13001031/django-heroku-settings-injection/13092534),它实际上可以像这样简单:

import dj_database_url

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

如果您设置了 DATABASE_URL 环境变量,则此方法有效。heroku:pg_promote 让你在那里。详情如下


确保你的 Heroku 上有 Postgres

heroku addons:add heroku-postgresql:dev

第 1 步:找出您的数据库 url

heroku config | grep POSTGRESQL

输出将如下所示:

HEROKU_POSTGRESQL__URL: postgres://user:password@host:5432/blabla

第 2 步:从上一步中获取设置名称(例如,HEROKU_POSTGRESQL_ROSE_URL)并将其放入您的设置文件中,如下所示

DATABASES = {'default': dj_database_url.config(default=os.environ["HEROKU_POSTGRESQL_ROSE_URL"])}

[更新] 正如 Ted 所指出的,有一种方法可以将颜色 URL 提升为 DATABASE_URL 变量:

heroku pg:promote HEROKU_POSTGRESQL_ROSE_URL

然后,您的数据库设置可以使用 DATABASE_URL 而不是更具异国情调的彩色 URL

DATABASES = {'default': dj_database_url.config(default=os.environ["DATABASE_URL"])}

鲍勃是你的叔叔

于 2012-08-25T22:45:19.293 回答
2

我自己通过将以下代码添加到 settings.py 来让它工作,似乎出于某种原因 Heroku 没有为我添加它......

通常它总是动态地在 Heroku 上添加代码,但我猜在 django 1.4 之后由于某种原因它不再这样做了。或者我只是做错了什么。

无论如何,这是将其附加到您的 settings.py 的代码,它应该像以前一样工作。

import sys
import urlparse
import os


# Register database schemes in URLs.
urlparse.uses_netloc.append('postgres')
urlparse.uses_netloc.append('mysql')

try:

    # Check to make sure DATABASES is set in settings.py file.
    # If not default to {}

    if 'DATABASES' not in locals():
        DATABASES = {}

    if 'DATABASE_URL' in os.environ:
        url = urlparse.urlparse(os.environ['DATABASE_URL'])

        # Ensure default database exists.
        DATABASES['default'] = DATABASES.get('default', {})

        # Update with environment configuration.
        DATABASES['default'].update({
            'NAME': url.path[1:],
            'USER': url.username,
            'PASSWORD': url.password,
            'HOST': url.hostname,
            'PORT': url.port,
        })
        if url.scheme == 'postgres':
            DATABASES['default']['ENGINE'] = 'django.db.backends.postgresql_psycopg2'

        if url.scheme == 'mysql':
            DATABASES['default']['ENGINE'] = 'django.db.backends.mysql'
except Exception:
    print 'Unexpected error:', sys.exc_info()
于 2012-05-23T13:30:36.667 回答
1

我的应用程序结构关闭了...... heroku 希望结构看起来像这样:

toplevel
  requirements.txt
  myapp
    manage.py
    all other django stuff
于 2012-05-21T03:12:28.443 回答
1

我遇到了同样的问题,我就是这样解决的

Step1:按照Phillip的Step 1获取数据库名称(颜色)

第2步:

$ heroku pg:promote HEROKU_POSTGRESQL_<COLOR> 

导致输出

Promoting HEROKU_POSTGRESQL_<COLOR> to DATABASE_URL... done
于 2012-08-28T07:30:02.713 回答
0

您需要将此添加到您的 requirements.txt 中:

psycopg2

默认情况下,Heroku 配置一个 Postgres 数据库并将代码注入您的 settings.py (https://devcenter.heroku.com/articles/django#postgres_database_config)。这从环境变量 DATABASE_URL 中读取,但确实需要安装 psycopg2。

于 2012-05-15T22:16:30.363 回答