Heroku Local工作正常,并且已连接到Heroku托管的Postgresql DB。尝试部署后,错误代码= H14状态= 503

时间:2020-10-10 01:41:02

标签: python django postgresql heroku

我希望我可以通过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

1 个答案:

答案 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文件更改为之前的版本