Python Heroku-settings.DATABASES上带有Postgresql的Django配置不正确。请提供名称值
我用Angular 4前端、Django后端和Postgresql数据库在Heroku上部署了Docker中的项目。此时,我的文件如下所示。当我打开应用程序时,出现错误:Python Heroku-settings.DATABASES上带有Postgresql的Django配置不正确。请提供名称值,python,django,python-3.x,docker,heroku,Python,Django,Python 3.x,Docker,Heroku,我用Angular 4前端、Django后端和Postgresql数据库在Heroku上部署了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
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上的数据库迁移可能有问题
程序文件:
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"]
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/
主目录的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"]
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/
docker-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,
}
}
基于此,我将数据库设置更改为
DATABASES = {'default': dj_database_url.config(default='postgres://localhost')}
不幸的是,我得到:
ImproperlyConfigured at /
settings.DATABASES is improperly configured. Please supply the NAME value.
有什么建议吗?我想帮助你,我在这里给你一些你可以改变的东西,让它工作,但我不能保证任何事情。我知道你现在花了很长时间才让这个应用程序运行 让它在本地运行 将数据库更改为以下内容:
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",
}
}
当然,只选择一个引擎并注释掉另一个引擎
您还可以尝试通过桌面应用程序访问您的数据库,例如,您可以使用给定的参数登录到您的数据库
直接乘坐Heroku DB
Heroku在初始化项目时提供DB。你应该有一个Postgres插件。转到链接“”(Heroku.com上应用程序的设置页面),点击旁边的按钮,就可以看到“配置变量”。应该弹出一个带有DATABASE\u URL的字段
以postgres://fasdfsdafsadfdsafsdafsda:123123132132123asdfdsafdssafdsfdaasdfsadf2-321-21-312-321.casdte-1.amazonaws.com:5432/adsdasdads123
注意!永远不要把那个链接给任何人
现在您可以在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_数据库,不要忘记安装它
我希望这能使你离目标更近一步
在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上出现的错误。在那里,你有回溯,可以找出为什么你的fronted不工作(现在我猜它是一个404与一些静态文件)。告诉我你下一个问题是什么时候写的;)从heroku应用程序获取日志我遇到了类似的问题,并能够使用以下过程将django应用程序部署到heroku:
settings.py
文件中。要执行此操作,请转到/resources。“Heroku Postgres::Database”应列在“附加组件”部分下。点击那个settings.py
文件中,并将其推送到heroku。特别是针对您的问题,本节中的“数据库”条目提供了数据库的名称如上所述,这一切都可以通过CLI编程完成。您在该数据库上创建了超级用户?你也知道那是一个本地数据库。如果你想要你的Heroku应用程序正在使用的引擎,你必须更改引擎参数。在本地,我得到了相同的错误。我不明白django如何连接到数据库,因为没有以前版本的设置中定义的参数?您是否为该Postgres创建了超级用户?请回答这个问题。如果您想运行PSQL local,您必须下载它并运行服务器。你都做了吗?@Hanseffranz我已经更新了我的帖子。使用旧设置时,数据库在本地正常工作。当我单击
配置变量
旁边的按钮显示配置变量
时,我得到此应用程序还没有配置变量
。没有数据库\u URL
heroku插件:创建heroku postgresql:hobby dev
将其放入终端。比你拥有的多。如果没有服务器,你不可能在互联网上有一个每个人都能看到的网站。我想我只是在你写的时候向前迈出了一步。但是还有另一个问题:)第1行:…user.“是否处于活动状态”、“auth\u user.“加入日期”来自“auth\u user…”
缺少迁移?当您想要添加真正的Postgres Heroku数据库时,您需要进行迁移,再次迁移并创建用户。不管怎样,你都需要做这些,但我有点担心,在旧问题没有解决之前,我又遇到了一个新问题。当你尝试我的本地设置时发生了什么?无法连接?我不确定发生了什么。当我打开应用程序时,我的前端不工作。但例如,当我做https://myapp.herokuapp.com/admin
我看到Django管理面板,但日志错误,我得到请为员工帐户输入正确的用户名和密码。请注意,这两个字段都可能区分大小写。
在本地,一切似乎都正常工作。然而,我以前有一个包含数据的数据库,此时Django创建了一个新的数据库,但看起来还可以。