Развертывание Django в Heroku (ошибка Psycopg2)

Итак, я слежу за руководством по началу работы с heroku с 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?

Я предположил, что это означает, что db еще не настроен ... поэтому я также вручную добавил опцию shared_db:

heroku addons:add shared-database:5mb

Но .. Я все еще получаю ту же ошибку. Что дает?

 schlamar15 мая 2012 г., 13:28
Не могли бы вы попробовать с помощью простого скрипта, выполняющего ручное соединение, если это общая проблема или специфическая для Django.
 Sam Stoelinga18 мая 2012 г., 11:57
Имея ту же проблему, вы в конце концов это исправили?

Ответы на вопрос(5)

Вы должны добавить это в ваши требования. Txt:

psycopg2

По умолчанию Heroku настраивает базу данных Postgres и вставляет код в файл settings.py (https://devcenter.heroku.com/articles/django#postgres_database_config). Это читает из переменной окружения DATABASE_URL, но требует установки psycopg2.

 Msencenb16 мая 2012 г., 08:54
Это существует в моем файле needs.txt, следуя этим инструкциям по установке:devcenter.heroku.com/articles/django

добавив следующий код в 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()
 Msencenb24 мая 2012 г., 01:59
Я использую django 1.3.1 до сих пор ... голосую за возможное решение 1.4 :)
 24 мая 2012 г., 02:42
Вы пробовали это? Он также может работать для 1.3, это может быть связано с использованием Shared DB вместо Dev DB, но не может это проверить. Я думаю, что это может решить и вашу проблему.

EDITED:

Как указал здесь @mipadi (http://stackoverflow.com/questions/13001031/django-heroku-settings-injection/13092534), на самом деле это может быть так просто:

import dj_database_url

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

Это работает, если у вас есть переменная env DATABASE_URL. heroku: pg_promote получает ваш там. Подробности ниже

Убедитесь, что у вас есть Postgres на Heroku

heroku addons:add heroku-postgresql:dev

Шаг 1: выяснить URL вашей базы данных

heroku config | grep POSTGRESQL

Вывод будет выглядеть примерно так:

HEROKU_POSTGRESQL__URL: postgres://user:[email protected]:5432/blabla

Шаг 2: Захватите имя настройки из предыдущего шага (например, HEROKU_POSTGRESQL_ROSE_URL) и поместите его в свой файл настроек следующим образом

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

[ОБНОВЛЕНИЕ] Как указал Тед, существует способ повысить цветовой URL-адрес в переменной DATABASE_URL:

heroku pg:promote HEROKU_POSTGRESQL_ROSE_URL

Тогда ваши настройки базы данных могут использовать DATABASE_URL, а не экзотические цветные URL-адреса.

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

Боб твой дядя

 19 сент. 2012 г., 23:55
Для тех, кто все еще борется с Heroku + Django, я собрал пример, чтобы начать быстро. Очень самоуверенный, но он делает вещиgithub.com/callmephilip/django-heroku-bootstrap

Шаг 1: Выполните шаг 1 Филиппа, чтобы получить имя базы данных (цвет)

Шаг 2:

$ heroku pg:promote HEROKU_POSTGRESQL_<COLOR> 

приводит к выходу

Promoting HEROKU_POSTGRESQL_<COLOR> to DATABASE_URL... done
 28 авг. 2012 г., 10:57
Очень мило, Тед. Я включу этот бит в свой первоначальный ответ
Решение Вопроса

чтобы структура выглядела следующим образом:

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

Ваш ответ на вопрос