Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Heroku-settings.DATABASES上带有Postgresql的Django配置不正确。请提供名称值_Python_Django_Python 3.x_Docker_Heroku - Fatal编程技术网

Python Heroku-settings.DATABASES上带有Postgresql的Django配置不正确。请提供名称值

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

我用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/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:

  • 我在我的项目目录中输入代码
  • 此时,heroku检测到我的应用程序是使用postgres的django应用程序,因此它自动添加了。如果你的应用程序不这样做,你可以手动
  • 现在,关键步骤是从heroku的postgres实例中获取配置信息,并将其添加到django应用程序中的
    settings.py
    文件中。要执行此操作,请转到/resources。“Heroku Postgres::Database”应列在“附加组件”部分下。点击那个
  • 这将带您进入“Heroku Postgresql”插件页面。单击“设置”选项卡。单击“查看凭据…”。这将打开一个带有配置的屏幕。有关postgres实例的信息
  • 将这些值(如主机、用户、端口、密码等)复制到django应用程序中的
    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创建了一个新的数据库,但看起来还可以。