2017-07-12 24 views
1

私はDokuerのHerokuプロジェクトにAngular 4フロントエンド、Djangoバックエンド、Postgresqlデータベースを配備しました。この時点で私のファイルは以下のようになります。アプリを開くと、エラーが表示されます。Heroku上でPostgresqlを使用するDjango - ホスト名 "db"をアドレスに変換できませんでした:名前またはサービスが不明です

2017-07-11T19:51:14.485577+00:00 app[web.1]:  self.connect() 
2017-07-11T19:51:14.485577+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/django/db/utils.py", line 94, in __exit__ 
2017-07-11T19:51:14.485578+00:00 app[web.1]:  six.reraise(dj_exc_type, dj_exc_value, traceback) 
2017-07-11T19:51:14.485578+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/django/utils/six.py", line 685, in reraise 
2017-07-11T19:51:14.485578+00:00 app[web.1]:  raise value.with_traceback(tb) 
2017-07-11T19:51:14.485579+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/django/db/backends/base/base.py", line 213, in ensure_connection 
2017-07-11T19:51:14.485579+00:00 app[web.1]:  self.connect() 
2017-07-11T19:51:14.485579+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/django/db/backends/base/base.py", line 189, in connect 
2017-07-11T19:51:14.485580+00:00 app[web.1]:  self.connection = self.get_new_connection(conn_params) 
2017-07-11T19:51:14.485580+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/django/db/backends/postgresql/base.py", line 176, in get_new_connection 
2017-07-11T19:51:14.485580+00:00 app[web.1]:  connection = Database.connect(**conn_params) 
2017-07-11T19:51:14.485581+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/psycopg2/__init__.py", line 130, in connect 
2017-07-11T19:51:14.485581+00:00 app[web.1]:  conn = _connect(dsn, connection_factory=connection_factory, **kwasync) 
2017-07-11T19:51:14.485582+00:00 app[web.1]: django.db.utils.OperationalError: could not translate host name "db" to address: Name or service not known 

ローカルではすべて正常に動作しているようです。私はdocker exec -ti name /bin/bashを使用し、次にpython {path}\manage.py migrateを使用してデータベースを追加します。

Herokuでのデータベースの移行に問題がある可能性がありますか?

Procfile:

web: sh -c 'cd PROJECT/backend/project && gunicorn project.wsgi --log-file -' 

プロジェクトツリー:

DockerProject 
     ├── Dockerfile 
     ├── Procfile 
     ├── init.sql 
     ├── requirements.txt 
     ├── docker-compose.yml 
     └── PROJECT 
      ├── frontend 
        └── all files 
      └── backend 
        └── project 
         ├── prices 
         ├── manage.py 
         └── project 
           └── all backend files 

フロントエンドのDockerfile:

# Create image based on the official Node 6 image from dockerhub 
FROM node:6 

# Create a directory where our app will be placed 
RUN mkdir -p /usr/src/app 

# Change directory so that our commands run inside this new directory 
WORKDIR /usr/src/app 

# Copy dependency definitions 
COPY package.json /usr/src/app 

# Install dependecies 
RUN npm install 

# Get all the code needed to run the app 
COPY . /usr/src/app 

# Expose the port the app runs in 
EXPOSE 4200 

# Serve the app 
CMD ["npm", "start"] 

メインディレクトリのDockerfile:

FROM python:3.6.1 
ENV PYTHONUNBUFFERED 1 
RUN mkdir /code 
WORKDIR /code 
ADD requirements.txt /code/ 
RUN pip3 install -r requirements.txt 
ADD . /code/ 

ドッキングウィンドウ-compose.yml:

version: '3' 

services: 
    db: 
    image: postgres 
    environment: 
     POSTGRES_USER: aso 
     POSTGRES_PASSWORD: somepass 
    django: 
    build: . 
    command: python3 MainDirectory/backend/myProject/manage.py runserver 0.0.0.0:8001 
    volumes: 
     - .:/code 
    ports: 
     - "8001:8001" 
    depends_on: 
     - db 
    angular: 
    build: MainDirectory/frontend 
    ports: 
     - "4200:4200" 
    depends_on: 
     - django 

init.sql:

CREATE USER myUser; 
CREATE DATABASE myProject; 
GRANT ALL PRIVILEGES ON DATABASE myProject TO myUser; 
+1

settings.pyのデータベースの値は何ですか? –

+0

@DanielRoseman設定で投稿を更新しました。 – wahtdbogh

答えて

1

あなたdbコンテナは、Postgresのを実行し、ローカルでのみ存在します。それはHerokuにはデプロイされておらず、どんな場合でもHerokuはドッカーの作成をサポートしていないので、Djangoのコンテナーは "db"が何を指しているかについて全く知らない。

dj-database-urlでデータベース設定を上書きする通常のパターンを使用して、本番環境では環境変数で指定されたPostgresアドオンを使用する必要があります。