所以我在运行以下代码:
- 创建了一个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"
3条答案
按热度按时间gc0ot86w1#
由于我没有收到任何答案,我回答我自己的问题,所以其他人可以使用我的解决方案...
好的所以经过大量的测试,来来去去我已经发现了问题。
于是发生了以下情况:对于本地开发,你应该使用docker-compose,mount volumes和所有这些有趣的东西,但是当使用heroku进行生产时,你需要设置一个命令来启动服务器。所以如果你打算在heroku上使用docker + django + postgres插件来设置一个项目,请执行以下步骤。
首先:
settings.py
数据库下修改为: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提供的应用程序端口,因此您的应用程序可以运行ALLOWED_HOSTS
编辑1:
您不需要gunicorn作为依赖项,Procfile中应该包含的唯一命令是:
web: python3 manage.py runserver
个编辑2
正如用户:https://stackoverflow.com/users/1949328/sam指出的,runserver不应在生产环境中运行,使用它的风险自担这只应用于设置一些小型测试项目。
5uzkadbs2#
尝试将heroku url添加到
ALLOWED_HOSTS
参考文献
d7v8vwbk3#
另外,不要忘记在app-name.herokuapp.com项目settings.py中的ALLOWED_HOST =['app-name.herokuapp.com']中添加您的应用程序域:“www.example.com“。