我希望我可以通过Heroku部署的方法获得帮助。
我有一个带有Python
框架和Django
数据库的Postgresql
应用程序。当我将环境从开发更改为生产时,我使用gunicorn
设置了一个wsgi路径,然后允许主机进入settings.py。我在manage.py所在的地方创建了一个Procfile
,将数据库迁移到postgres并安装了whitenoise
中间件来收集静态文件。
当我运行Heroku local
验证我的应用程序正在运行时,一切正常。静态文件已找到,可以访问数据库,并且本地主机为“ 0.0.0.0”。
当我推送到Heroku时,会获得发布应用程序的链接,并验证部署已完成。单击链接后,我看到显示错误页面。 “ Heroku日志--tail”给我一个错误代码= H14 status = 503。我知道Procfile一定有问题,因为它不在我的根目录中。
当我尝试将Procfile移到根目录时,gunicorn停止工作,因为它找不到wsgi文件或manage.py。
如何解决此冲突,我应该采取什么方法?我不明白为什么在Heroku local
中一切都能正常运行。足以确认一切运行正常并且可以推送到Heroku master吗?
>FINALPROJECT(root)
> .vscode
> project5
> brainSkills
> migrations
> static
> templates
models.py
urls.py
views.py
> project5
_init_.py
settings.py
wsgi.py
manage.py
Procfile
requirements.txt
> venv
.env
.gitignore
README.md
requirements.txt
答案 0 :(得分:0)
您的Procfile
必须在项目的根目录下,但是文件夹结构存在问题。
保持Procfile
的位置,您必须将wsgi文件的位置作为python导入之类的符号来提供,例如:gunicorn project5.wsgi
。在项目根目录中,您必须将其称为project5.project5.wsgi
,但根目录中的project5
文件夹不是模块。
您可以通过在__init__.py
(根目录下的一个)内创建一个空的project5
文件来使其成为有效的python模块文件夹
另一种解决方案是将项目根目录本身更改为project5
,但这并不建议中途
编辑1
出现module project5.settings not found
错误的原因是因为在您的wsgi.py
文件中更改了以下行:
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project5.settings')
到
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project5.project5.settings')
这应该将默认设置模块更改为正确的模块
编辑2
如果您的项目根目录与django应用程序的项目根目录相同,则一切都会简单得多,最简单的解决方案是将README.md
和.env
之类的所有文件都移至{{1} }文件夹并将其用作项目根目录,唯一的缺点是您必须重新初始化git存储库,此外,如果这样做,请确保将project5
文件更改为之前的版本