我使用Angular 4前端,Django后端和Postgresql数据库在Herer上部署我的Docker项目。此时我的文件如下所示。当我打开应用程序时,我收到错误:
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
Frontend的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;
更新
包含postgresql数据库的项目在此设置下正常运行。但是正如我所提到的,Heroku存在问题。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'aso',
'USER': 'postgres',
'HOST': 'db',
'PORT': 5432,
}
}
基于on this topic我将数据库设置更改为
DATABASES = {'default': dj_database_url.config(default='postgres://localhost')}
不幸的是,我得到了:
ImproperlyConfigured at /
settings.DATABASES is improperly configured. Please supply the NAME value.
有什么建议吗?
答案 0 :(得分:3)
我想帮助你,我会在这里给你什么,你可以改变它,但我不能保证任何事情。我知道你现在要花很长时间才能运行该应用程序。
让它运行本地
将DATABASES更改为以下内容:
DATABASES = {
"default":
{
"ENGINE": "django.db.backends.postgresql_psycopg2", #one of those should work
'ENGINE': 'django.db.backends.postgresql', #one of those should work
"NAME": 'myProject',
"HOST": "localhost",
"PORT": "5432",
}
}
当然只选择一个引擎并评论另一个引擎。
您还可以尝试通过桌面应用程序(如PSequel)访问您的数据库,您可以使用给定的参数登录到数据库。
直接拿走Heroku DB
Heroku在初始化项目时提供数据库。你应该有一个Postgres附加组件。转到那个链接" https://dashboard.heroku.com/apps/YourAppName/settings" (设置页面ob您在Heroku.com上的应用程序)并且您得到了重点" Config Variables"点击旁边的按钮。应该弹出一个DATABASE_URL
字段复制其旁边的链接,格式为postgres://fasdfsdafsadfdsafsdafsda:123123132132123asdfdsafdssafdsfdaasdfsadf2-321-21-312-321.casdte-1.amazonaws.com:5432/adsdasdasads123
注意!永远不要给任何人这个链接!
现在您可以在settings.py中使用
import dj_database_url
DATABASES = {'default': dj_database_url.parse('postgres://the-just-copied-link-comes-here
在您的settings.py中,您可以在项目中使用Heroku DB。它的开发速度非常慢,但是当你将代码推送到Heroku时,你需要以这种方式发送它。如果没有dj_database_url,请不要忘记安装dj_database_url。 Package
我希望这会让你更接近你的目标。
在settings.py 中
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
MAILER_LIST = ['yourMail@gmail.com']
EMAIL_HOST = ' smtp.gmail.com'
EMAIL_HOST_USER = 'Name'
EMAIL_HOST_PASSWORD = 'lalalala'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
DEFAULT_FROM_EMAIL = 'root@localhost'
ADMINS = [("Name", 'Mail@gmail.com')]
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'mail_admins': {
'level': 'ERROR',
'class': 'django.utils.log.AdminEmailHandler' }},
'loggers': {'django.request': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': True, },}}
您现在也不必这样做,但有了这个,您可以在日志记录部分看到您在heroku上遇到的错误。在那里你有追溯,并可以弄清楚为什么你的前端不工作(现在我猜测它的404与一些静态文件)。在您撰写下一个问题时告诉我;)从您的heroku应用程序https://dashboard.heroku.com/apps/YourAppName/logs
获取日志答案 1 :(得分:0)
我遇到了类似的问题,并且能够使用以下过程将django应用程序部署到heroku:
settings.py
文件中。为此,请转到https://dashboard.heroku.com/apps/ / resources。 “Heroku Postgres :: Database”应列在“附加组件”部分下。点击它。settings.py
文件中,然后将其推送到heroku。 特别针对您的问题,本节中的“数据库”条目提供了数据库的名称。 正如here所述,这可以通过CLI以编程方式完成。