5

次のチュートリアルに従って、HerokuでDjangoを実行しようとしています。

HerokuでDjangoを使い始める

syncbdの部分に到達するまで、すべてが正常に実行されていました。

データベースの同期

を実行するとheroku run python manage.py syncdb、次のエラーが発生します。

psycopg2.OperationalError: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

私は現在HomebrewのPostgreSQLを使用していますが、正常に動作しています。

LOG:  database system is ready to accept connections
LOG: autovacuum launcher started

アプリサーバーもローカルで実行されています:

Validating models...

0 errors found
Django version 1.4.1, using settings 'hellodjango.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

そして私はMacOS10.7に取り組んでいます。

Herokuにデプロイしているコードは、次の場所にあります。

私のコードへのリンク

私はすでに次のような多くの可能な解決策を試しました:

http://jeffammons.net/2011/09/fixing-postgres-on-mac-10-7-tiger-for-django/

しかし、何も機能していないようです。

編集:

周りを見回して、このコードを見つけて、settings.pyファイルに追加しました。これで、問題が解決したようです。

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

try:
    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() 
4

3 に答える 3

1

リンクsettings.pyた元のコードでは、設定に対して2つの矛盾する宣言があるようです。DATABASES

1)3行目:

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

2)16行目:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'traineeworld',                      # Or path to database file if using sqlite3.
        'USER': '',                      # Not used with sqlite3.
        'PASSWORD': '',                  # Not used with sqlite3.
        'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
    }
}

3)また、最新の編集の追加コードは、接続引数を指定するためのさらに別のメソッドのように見えます。これは、前の宣言の効果を再び無効にする可能性があります。

これらのメソッドは、互いに積み重ねることを意図したものではありません。1つだけ選択します。

また、技術的には、dbサーバーへのクライアント側接続のイニシエーターとして、サーバーがTCP(この場合はそのホスト名またはIPアドレスとポート)を介して到達するのか、それともUnixドメインソケットファイル、およびその場合はその完全なディレクトリパス(スラッシュで始まる)。どちらの場合も、これはHOST接続パラメータの一部になります。

Postgresはこれらすべてにデフォルト値を提供しますが、さまざまなソースからのさまざまなソフトウェアパーツを組み合わせて一致させるとすぐに、これらのデフォルトは役に立たなくなり、明示的な値を指定することが必須になります。

ソケットのパスpsqlが不明な場合、postgresユーザーとして接続されている場合、このパスはSQLコマンドで取得できます。

SHOW unix_socket_directory;

この設定は、サーバー側のpostgresql.conf構成ファイルにも含まれています。

于 2012-09-07T18:18:11.403 に答える
1

posgresqlを使用してHerokuにDjangoアプリをデプロイしました。これは私のコードであり、完全に機能します。お役に立てば幸いです。

Requirements.txt

Django==1.7.4
dj-database-url==0.3.0
dj-static==0.0.6
gunicorn==19.2.1
psycopg2==2.6
six==1.9.0
static3==0.5.1
wsgiref==0.1.2

wsgi.py

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "<PROJECT_NAME>.settings")

from django.core.wsgi import get_wsgi_application
from dj_static import Cling

application = Cling(get_wsgi_application())

Procfile

web: gunicorn <PROJECT_NAME>.wsgi

HerokuにPostgresがあることを確認してください:

heroku addons:add heroku-postgresql:dev

データベースのURL環境変数を把握します。次のようになります:HEROKU_POSTGRESQL__URL

heroku config | grep POSTGRESQL

settings.py

import dj_database_url
POSTGRES_URL = "HEROKU_POSTGRESQL_<DB_NAME>_URL"
DATABASES = {'default': dj_database_url.config(default=os.environ[POSTGRES_URL])}

# Honor the 'X-Forwarded-Proto' header for request.is_secure()
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

# Allow all host headers
ALLOWED_HOSTS = ['*']

# Static asset configuration
import os
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = 'staticfiles'
STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)

その後、すべてをマスターにプッシュしてsyncdbを実行します

heroku run python manage.py syncdb

これは、HerokuでDjangoを使い始めるのに役立つ場合があります。何か問題が発生した場合、または何か他のものが必要な場合はお知らせください。

于 2015-03-10T23:56:18.013 に答える
0

PORTをデータベースにロードしていない可能性があります。データベース接続をロードするためのコードはどのように見えますか?

于 2012-09-07T15:41:19.497 に答える