Docker + Django + Postgres附加组件+ Heroku

zsohkypk  于 2022-11-13  发布在  Docker
关注(0)|答案(3)|浏览(125)

所以我在运行以下代码:

  • 创建了一个Dockerfile和一个docker-compose.yml来本地开发一个django应用程序,这里什么都不用做,一切都很好。
  • 停靠文件

来自python:3
ENV Python未缓冲1
运行mkdir /代码
工作目录/代码
添加要求. txt/代码/
运行pip安装-r要求. txt
附加/代码/

  • 它所做的就是获取python3映像,将代码从我的源文件夹复制到docker映像中
  • 然后,我尝试将其部署到heroku,因此我在heroku应用程序上添加了postgres插件,并使用dj_database_url对其进行配置,在我的www.example.com文件上使用以下命令settings.py:DATABASES = {} DATABASES['default'] = dj_database_url.config()
  • 之后,我用X1 M1 N1 X把我的应用程序推到了Heroku,它被推到了我的应用程序上,一点问题都没有...
  • 最后一个问题是,当我使用heroku open打开应用程序时,它显示出现错误:Application error An error occurred in the application and your page could not be served. If you are the application owner, check your logs for details.
  • 这是heroku网站上刊登的内容
  • 现在,当我使用heroku logs -t进行日志记录时,它说退出时代码为0,然后崩溃

我错过了什么?

  • 另外:当我运行heroku run web python manage.py migrate时,它会迁移heroku应用程序上的数据
  • 加2:当我运行heroku run web python manage.py runserver时,它说正在www.example.com上运行127.0.0.1:8000
    **EDIT 1:**如果你想重现这个问题,你可以在下面的git repo中克隆我所有的代码:https://github.com/giovanniKleinCampigoto/djangoherokuproblem.git
    编辑2:

在本官方教程中:https://devcenter.heroku.com/articles/deploying-python,说要使用virtualenv,但我使用的是docker,所以我真的不知道如何继续...

**EDIT 3:**此外,我注意到,当我使用以下命令将图像推送给heroku时:heroku container:push web,服务器重新部署,但不运行procfile上的任何内容,只记录以下内容:使用命令python3启动进程]
**编辑4:**当运行heroku local web时,编辑Procfile以运行docker-compose up工作正常,问题是上传到heroku的服务器...不确定是否应该将文件编辑为仅python manage.py runserver...

docker-compose.yml

version: '2'

services:
  web:
    build: .
    env_file: composeexample/.env
    command: python3 manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
gc0ot86w

gc0ot86w1#

由于我没有收到任何答案,我回答我自己的问题,所以其他人可以使用我的解决方案...
好的所以经过大量的测试,来来去去我已经发现了问题。
于是发生了以下情况:对于本地开发,你应该使用docker-compose,mount volumes和所有这些有趣的东西,但是当使用heroku进行生产时,你需要设置一个命令来启动服务器。所以如果你打算在heroku上使用docker + django + postgres插件来设置一个项目,请执行以下步骤。
首先:

DATABASES = {}
DATABASES['default'] = dj_database_url.config(default='DATABASE_URL')

  • 这个DATABASE_URL是一个环境变量,你可以在你的heroku应用中获得,在heroku上进入你的 Jmeter 板,找到你的应用,进入设置,然后配置变量,点击reveal,你应该得到DATABASE_URL,默认变量是django上的/admin工作所需要的...(这只是一个变通办法,你应该找到一种方法来从环境变量中获得DATABASE_URL
  • 修改你的Dockerfile来运行命令把django服务器放到最后一行:CMD python3 manage.py runserver 0.0.0.0:$PORT
  • 变量$PORT是heroku提供的应用程序端口,因此您的应用程序可以运行
  • 最后但并非最不重要的一点是,正如我们的朋友Alejandro Sánchez所说,将您的heroku应用的url添加到ALLOWED_HOSTS
  • 你是黄金,你的应用程序应该运行在heroku应用程序网址
    编辑1:

您不需要gunicorn作为依赖项,Procfile中应该包含的唯一命令是:web: python3 manage.py runserver

编辑2

正如用户:https://stackoverflow.com/users/1949328/sam指出的,runserver不应在生产环境中运行,使用它的风险自担这只应用于设置一些小型测试项目

5uzkadbs

5uzkadbs2#

尝试将heroku url添加到ALLOWED_HOSTS
参考文献

d7v8vwbk

d7v8vwbk3#

另外,不要忘记在app-name.herokuapp.com项目settings.py中的ALLOWED_HOST =['app-name.herokuapp.com']中添加您的应用程序域:“www.example.com“。

相关问题