Heroku Django数据库错误

时间:2018-08-09 20:30:40

标签: python django heroku django-models django-views

这是我的第一个Python项目,我正尝试将其部署到Heroku。我已经看了很多与此有关的问题,但还没有找到有关我的确切问题的解决方案。我收到以下错误。

Exception Type:   ProgrammingError
Exception Value:  relation "articles_cover" does not exist
  LINE 1: ..."profession", "articles_cover"."description" FROM "articles_...

我怀疑这与我在文件结构中处理视图和模型的方式有关。我的模型位于应用程序内部,而该应用程序位于整个项目文件夹中,并且我试图在应用程序的某些视图中外部访问模型。这在本地工作得很好。这是结构。

├───articles
│   ├───migrations
│   │   └───__pycache__
│   ├───templates
│   │   └───articles(<==template tags applies to various elements in files)
│   |───__pycache__
|   |____models.py (<==models here)
├───assets
├───MyProject
│   |───__pycache__
|   |___views.py (<==models applied here)
├───media
└───templates (<==template tags applied to various elements in files)

所以我当时认为这是与将模型导入views.py有关的参考问题。再次,以下内容似乎可以在本地运行,并且在遍历Django的文档后,我还没有找到另一种方法来执行以下操作。

views.py

from django.http import HttpResponse
from django.shortcuts import render
from articles.models import Article, Cover, Novel, Event, Podcast, Novella, Short

def homepage(request):
    covers = Cover.objects.all()
    novels = Novel.objects.all()
    events = Event.objects.all()
    novellas = Novella.objects.all()
    shorts = Short.objects.all()

    return render(request, 'homepage.html', {
        'covers': covers, 'novels': novels, 'events': events,
        'novellas': novellas, 'shorts': shorts})

def podcast(request):
    podcasts = Podcast.objects.all()
    return render(request, 'podcast.html', {'podcasts': podcasts})

我认为尝试将其部署到Heroku时缺少某些内容。我按照这封信的here指示进行操作,因此不确定下一步如何做。

我知道Django使用的SQlite在某些情况下可能会有些无聊。我还需要使用其他东西吗?如果是这样,该怎么办?这仅仅是一个进口问题吗?预先感谢。

更新:我遵循了所有人的建议,并找到了Posgress文档。我通过pipenv安装了它,并在我的settings.py文件中添加了以下几行。

db_from_env = dj_database_url.config()
DATABASES['default'].update(db_from_env)

我尝试了不同的方法将此方法集成到原始DATABASES变量的语法中,但是它们都产生相同的结果。 “应用程序错误”。当我检查日志时,发现以下内容。

  

NameError:名称'DATABASES'未定义

我觉得我错过了Heroku和Django文档只是假设我已经完成的步骤。我只是想弄清楚它是什么。

答案:找到了很多资源Here。跟着它一步一步解决了问题。感谢那些回答。你们带领我朝着正确的方向前进。否则我仍然会为此而苦苦挣扎。

2 个答案:

答案 0 :(得分:1)

无法在Heroku上运行sqlite。 sqlite db是文件系统上的文件,因此不会在dynos之间共享,并且不会在重新启动后持久存在。迁移将不起作用,因为它们总是会在单独的进程中进行,因此会在db文件的单独副本上进行。

使用适当的数据库附件,即Postgres。

答案 1 :(得分:1)

在Heroku上部署到生产环境时,建议使用PostgresSQL。在Heroku上设置Postgres并将其连接到Django应用程序很简单

Heroku有一些很棒的文档,介绍了如何启动和运行您的应用程序+数据库。

https://devcenter.heroku.com/articles/django-app-configuration