2 python django heroku python-3.x docker
我在 Docker 中使用 Angular 4 前端、Django 后端和 Postgresql 数据库在 Heroku 上部署了我的项目。此时我的文件如下所示。当我打开应用程序时,出现错误:
\n\n2017-07-11T19:51:14.485577+00:00 app[web.1]: self.connect()\n2017-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__\n2017-07-11T19:51:14.485578+00:00 app[web.1]: six.reraise(dj_exc_type, dj_exc_value, traceback)\n2017-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\n2017-07-11T19:51:14.485578+00:00 app[web.1]: raise value.with_traceback(tb)\n2017-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\n2017-07-11T19:51:14.485579+00:00 app[web.1]: self.connect()\n2017-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\n2017-07-11T19:51:14.485580+00:00 app[web.1]: self.connection = self.get_new_connection(conn_params)\n2017-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\n2017-07-11T19:51:14.485580+00:00 app[web.1]: connection = Database.connect(**conn_params)\n2017-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\n2017-07-11T19:51:14.485581+00:00 app[web.1]: conn = _connect(dsn, connection_factory=connection_factory, **kwasync)\n2017-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\n
Run Code Online (Sandbox Code Playgroud)\n\n本地一切似乎都运行正常。docker exec -ti name /bin/bash
然后我使用python {path}\\manage.py migrate
并添加数据库。
也许我在 Heroku 上的数据库迁移有问题?
\n\n过程文件:
\n\nweb: sh -c \'cd PROJECT/backend/project && gunicorn project.wsgi --log-file -\'\n
Run Code Online (Sandbox Code Playgroud)\n\n项目树:
\n\nDockerProject\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Dockerfile\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Procfile\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 init.sql\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 requirements.txt\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 docker-compose.yml\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 PROJECT\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 frontend\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 all files\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 backend\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 project\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 prices\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 manage.py\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 project\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 all backend files\n
Run Code Online (Sandbox Code Playgroud)\n\n前端的 Dockerfile:
\n\n# Create image based on the official Node 6 image from dockerhub\nFROM node:6\n\n# Create a directory where our app will be placed\nRUN mkdir -p /usr/src/app\n\n# Change directory so that our commands run inside this new directory\nWORKDIR /usr/src/app\n\n# Copy dependency definitions\nCOPY package.json /usr/src/app\n\n# Install dependecies\nRUN npm install\n\n# Get all the code needed to run the app\nCOPY . /usr/src/app\n\n# Expose the port the app runs in\nEXPOSE 4200\n\n# Serve the app\nCMD ["npm", "start"]\n
Run Code Online (Sandbox Code Playgroud)\n\n主目录的 Dockerfile:
\n\nFROM python:3.6.1\nENV PYTHONUNBUFFERED 1\nRUN mkdir /code\nWORKDIR /code\nADD requirements.txt /code/\nRUN pip3 install -r requirements.txt\nADD . /code/\n
Run Code Online (Sandbox Code Playgroud)\n\ndocker-compose.yml:
\n\nversion: \'3\'\n\nservices:\n db:\n image: postgres\n environment:\n POSTGRES_USER: aso\n POSTGRES_PASSWORD: somepass\n django:\n build: .\n command: python3 MainDirectory/backend/myProject/manage.py runserver 0.0.0.0:8001\n volumes:\n - .:/code\n ports:\n - "8001:8001"\n depends_on:\n - db\n angular:\n build: MainDirectory/frontend\n ports:\n - "4200:4200"\n depends_on:\n - django\n
Run Code Online (Sandbox Code Playgroud)\n\n初始化.sql:
\n\nCREATE USER myUser;\nCREATE DATABASE myProject;\nGRANT ALL PRIVILEGES ON DATABASE myProject TO myUser;\n
Run Code Online (Sandbox Code Playgroud)\n
您db
运行 Postgres 的容器仅存在于本地。它没有部署到 Heroku,并且在任何情况下 Heroku 都不支持 docker-compose,因此 Django 容器不知道“db”指的是什么。
您应该使用通过 dj-database-url 覆盖数据库设置的正常模式,以便在生产中您的应用程序使用环境变量中指定的 Postgres 插件。
归档时间: |
|
查看次数: |
1865 次 |
最近记录: |