Heroku 上带有 Postgresql 的 Django - settings.DATABASES 配置不正确。请提供名称值
Posted
技术标签:
【中文标题】Heroku 上带有 Postgresql 的 Django - settings.DATABASES 配置不正确。请提供名称值【英文标题】:Django with Postgresql on Heroku - settings.DATABASES is improperly configured. Please supply the NAME value 【发布时间】:2017-12-17 14:15:33 【问题描述】:我使用 Angular 4 前端、Django 后端和 Postgresql 数据库在 Docker 中的 Heroku 上部署了我的项目。此时我的文件如下所示。当我打开应用程序时出现错误:
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"]
主目录的 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/
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,
基于on this topic 我将数据库设置更改为
DATABASES = 'default': dj_database_url.config(default='postgres://localhost')
不幸的是,我得到:
ImproperlyConfigured at /
settings.DATABASES is improperly configured. Please supply the NAME value.
有什么建议吗?
【问题讨论】:
您在该数据库上创建了超级用户?你也知道那是一个本地数据库。如果您想要 Heroku 应用正在使用的那个,您必须更改 ENGINE 参数。 本地我得到同样的错误。我不明白 django 必须如何连接到数据库,因为没有像以前版本的设置中定义的参数? 您是否为该 Postgres 创建了超级用户?请回答问题。如果你想在本地运行 PSQL,你必须下载它并运行一个服务器。这些都是你做的? @hansTheFranz 我更新了我的帖子。旧设置数据库在本地正常工作。 【参考方案1】:我想帮助你,我在这里给你你可以改变的东西,但我不能保证任何事情。我知道您现在正在尝试很长时间才能使该应用程序运行。
让它在本地运行
将数据库更改为以下内容:
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”(Heroku.com 上您的应用程序的设置页面),然后点击旁边的按钮“配置变量”。应该会弹出一个带有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 数据库。它的开发速度非常慢,但是当您将代码推送到 Heroku 时,您需要以这种方式发送它。如果没有,不要忘记安装 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
【讨论】:
当我单击Config Variables
旁边的按钮Reveal Config Vars
时,我得到There are no config vars for this app yet
。没有DATABASE_URL
。
heroku addons:create heroku-postgresql:hobby-dev
把它放在终端里。比你拥有它。没有服务器,您无法在 Internet 上拥有可供所有人查看的站点。
我想我只是像你写的那样向前迈了一步。但是还有一个问题:)LINE 1: ...user"."is_active", "auth_user"."date_joined" FROM "auth_user...
缺乏迁移?
当您想要添加真正的 Postgres Heroku 数据库时,您需要进行迁移并再次迁移并创建用户。无论如何,你需要做所有这些,但我有点害怕在旧问题没有解决之前提出一个新问题。当你尝试我的本地设置时发生了什么?无法连接?
我不确定发生了什么。当我open app
我的前端不工作。但是例如,当我执行https://myapp.herokuapp.com/admin
时,我看到 Django 管理面板但日志错误,我得到Please enter the correct username and password for a staff account. Note that both fields may be case-sensitive.
本地一切似乎都正常工作。但是我之前有数据的数据库,此时Django创建了一个新的,但看起来还可以。【参考方案2】:
我遇到了类似的问题,并且能够使用以下过程将 django 应用程序部署到 heroku:
-
我在我的项目目录中created a new heroku app 并推送了代码。
此时,heroku 检测到我的应用程序是使用 postgres 的 django 应用程序,因此它自动添加了postgres addon。如果您的应用不这样做,您可以手动add the heroku postgresql addon。
现在,关键步骤是从heroku 的postgres 实例中获取配置信息,并将其添加到django 应用程序中的
settings.py
文件中。为此,请转到 https://dashboard.heroku.com/apps//resources 。 “Heroku Postgres :: Database”应该列在“附加组件”部分下。点击那个。
这会将您带到“Heroku Postgresql”插件的页面。单击“设置”选项卡。单击“查看凭据...”。这将打开一个带有配置的屏幕。关于 postgres 实例的信息。
将这些值(如主机、用户、端口、密码等)复制到您的 django 应用程序的 settings.py
文件中,并将其推送到 heroku。 特别是针对您的问题,本节中的“数据库”条目提供了数据库的名称。
祈祷吧,希望一切顺利!
如here 所述,这一切都可以通过 CLI 以编程方式完成。
【讨论】:
以上是关于Heroku 上带有 Postgresql 的 Django - settings.DATABASES 配置不正确。请提供名称值的主要内容,如果未能解决你的问题,请参考以下文章