Django与Heroku上的Postgresql – settings.DATABASESconfiguration不当。 请提供NAME值

我部署在Heroku我的项目在Docker与Angular 4前端,Django后端和Postgresql数据库。 在这个时候我的文件看起来如下所示。 当我打开应用程序,我得到错误:

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; 

UPDATE

包括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. 

有什么build议么?

我想帮助你,我在这里给你你可以改变的东西,但我不能答应任何事情。 我知道你现在正在尝试相当长的时间来运行该应用程序。

让它在本地运行

将数据库更改为以下内容:

 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)访问数据库,您可以使用给定的参数login到数据库。

直接拿Heroku DB

初始化项目时,Heroku提供了一个数据库。 你应该有一个Postgres插件。 去“ https://dashboard.heroku.com/apps/YourAppName/settings ”这个链接(在Heroku.com上设置你的应用程序的页面),然后点击“Config Variables”点击它旁边的button。 应该用DATABASE_URLpopup一个字段,使用格式postgres://fasdfsdafsadfdsafsdafsda:123123132132123asdfdsafdssafdsfdaasdfsadf2-321-21-312-321.casdte-1.amazonaws.com:5432/adsdasdasads123复制旁边的链接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。 包

我希望能让你更接近你的目标。

在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, },}} 

您现在也不必这样做,但通过这个,您可以在日志logging部分中看到您在heroku上获得的错误。 在那里你有追溯,可以找出为什么你的前端不工作(现在即时通讯猜测其与一些静态文件的404)。 当你写下你的下一个问题时告诉我;)从你的英雄应用程序获取日志https://dashboard.heroku.com/apps/YourAppName/logs