복붙노트

[PYTHON] Heroku에 장고 배포 (Psycopg2 오류)

PYTHON

Heroku에 장고 배포 (Psycopg2 오류)

그래서 나는 장고와 함께 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?

나는 db가 아직 설정되지 않았다고 생각했다. 그래서 shared_db 옵션도 수동으로 추가했다.

heroku addons:add shared-database:5mb

하지만 .. 나는 여전히 같은 오류가 발생합니다. 뭐라 구요?

해결법

  1. ==============================

    1.편집 :

    편집 :

    @ 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
    

    결과는 다음과 같습니다.

    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
    

    데이터베이스 설정에서 이국적인 색 URL과 달리 DATABASE_URL을 사용할 수 있습니다.

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

    밥은 당신의 삼촌입니다.

  2. ==============================

    2.나는 settings.py에 다음 코드를 추가하여 작동시키지 만, Heroku가 그것을 위해 추가하지 않은 몇 가지 이유로 보인다.

    나는 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()
    
  3. ==============================

    3.내 앱 구조가 꺼져있었습니다 ... heroku는 다음과 같이 구조를 원합니다.

    내 앱 구조가 꺼져있었습니다 ... heroku는 다음과 같이 구조를 원합니다.

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

    4.나는 똑같은 문제를 겪었다.

    나는 똑같은 문제를 겪었다.

    Step1 : Phillip의 1 단계에 따라 데이터베이스 이름 (색상)을 얻습니다.

    2 단계:

    $ heroku pg:promote HEROKU_POSTGRESQL_<COLOR> 
    

    출력으로 이어진다.

    Promoting HEROKU_POSTGRESQL_<COLOR> to DATABASE_URL... done
    
  5. ==============================

    5.이것을 requirements.txt에 추가해야합니다.

    이것을 requirements.txt에 추가해야합니다.

    psycopg2
    

    기본적으로 Heroku는 Postgres 데이터베이스를 구성하고 settings.py (https://devcenter.heroku.com/articles/django#postgres_database_config)에 코드를 주입합니다. 이것은 환경 변수 DATABASE_URL에서 읽지 만 psycopg2가 설치되어 있어야합니다.

  6. from https://stackoverflow.com/questions/10596893/deploying-django-to-heroku-psycopg2-error by cc-by-sa and MIT license