Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将Django部署到Heroku(Psycopg2错误)_Python_Django_Postgresql_Deployment_Heroku - Fatal编程技术网

Python 将Django部署到Heroku(Psycopg2错误)

Python 将Django部署到Heroku(Psycopg2错误),python,django,postgresql,deployment,heroku,Python,Django,Postgresql,Deployment,Heroku,因此,我将与django一起学习heroku的入门指南。但是,当我运行此命令时: 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?

因此,我将与django一起学习heroku的入门指南。但是,当我运行此命令时:

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

但是。。我仍然会犯同样的错误。给出了什么?

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

psycopg2

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

我的应用程序结构已关闭。。。heroku希望结构如下所示:

toplevel
  requirements.txt
  myapp
    manage.py
    all other django stuff

我自己通过在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()

编辑:

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

import dj_database_url

DATABASES = {'default' : dj_database_url.config() }
如果您有一个数据库URL env变量集,则此选项有效。希罗库:pg_提升你的位置。详情如下


确保你的Heroku上有博士后

heroku addons:add heroku-postgresql:dev
步骤1:找出您的数据库url

heroku config | grep POSTGRESQL
输出将如下所示:

toplevel
  requirements.txt
  myapp
    manage.py
    all other django stuff
HEROKU_POSTGRESQL___URL: postgres://user:password@主持人:5432/blabla

第二步:从上一步抓取设置名称(例如HEROKU_POSTGRESQL_ROSE_URL),然后像这样将其放入设置文件中

DATABASES = {'default': dj_database_url.config(default=os.environ["HEROKU_POSTGRESQL_ROSE_URL"])}
[更新]正如Ted所指出的,有一种方法可以将颜色URL升级为数据库_URL变量:

heroku pg:promote HEROKU_POSTGRESQL_ROSE_URL
然后,您的数据库设置可以使用数据库URL,而不是更奇特的彩色URL

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

鲍勃是你叔叔

我也有同样的问题,我就是这样解决的

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

步骤2:

$ heroku pg:promote HEROKU_POSTGRESQL_<COLOR> 
$heroku pg:推广heroku\u POSTGRESQL\u
导致输出

Promoting HEROKU_POSTGRESQL_<COLOR> to DATABASE_URL... done
将HEROKU\u POSTGRESQL\u升级到数据库\u URL。。。完成

如果是一般性问题或Django特有的问题,您是否可以尝试使用一个简单的脚本进行手动连接。如果存在相同的问题,您是否最终修复了它?存在于我的requirements.txt文件中,请按照以下安装说明进行操作:我仍在运行Django 1.3.1。。。向上投票选择可能的1.4解决方案:)您尝试过吗?它可能也适用于1.3,可能与使用Dev DB的共享DB isntead有关,但无法验证这一点。我想这也可以解决你的问题。很好,特德。我将把这一点融入到我的原始回答中,对于那些仍在与Heroku+Django抗争的人,我已经整理了一个样板文件,以加快进度。非常固执己见,但它能完成任务: