所以我一直在浏览Heroku的开发中心,在Stack Overflow上,整个互联网,我不知道如何在我的Django项目中使用Heroku工作。
我的主要问题是让Postgres数据库正常运行。我运行heroku run python manage.py syncdb
它说它会进行迁移甚至创建一个超级用户,但是当我进入我部署的应用程序时,我得到了臭名昭着的“关系不存在”错误。
阅读我看到你必须使用我的本地数据库在本地计算机上运行python manage.py migrate
,然后运行heroku run python manage.py syncdb
或heroku run python manage.py migrate
。我很困惑,如果实际情况如此,如果我仍在使用virtualenv的情况。
编辑:以下是投放“关系不存在错误”的相关视图以及使用的相应模型。
models.py
class Location(models.Model):
name = models.CharField(max_length=100)
route = models.ForeignKey('Route', null=True, blank=True)
client = models.CharField(max_length=50)
def __unicode__(self):
return u'%s, route: %s' % (self.name, self.route)
class Route(models.Model):
name = models.CharField(max_length=100)
client = models.CharField(max_length=50)
def __unicode__(self):
return u'%s' % self.name
serializers.py
from rest_framework import serializers
from .models import Route, Location
class LocationSerializer(serializers.ModelSerializer):
class Meta:
model = Location
fields = ('pk', 'client', 'name')
class RouteSerializer(serializers.ModelSerializer):
location_set = LocationSerializer(many=True)
class Meta:
model = Route
fields = ('pk', 'client', 'name', 'location_set')
views.py
from .models import Location, Route
from .serializers import RouteSerializer, LocationSerializer
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
class RouteList(APIView):
def get(self, request, format=None):
client = request.user.groups.all()[0]
routes = Route.objects.filter(client=client)
serializer = RouteSerializer(routes, many=True)
return Response(serializer.data)
答案 0 :(得分:0)
我认为您不包括应用模型的迁移。 如果您使用的是django 1.8,则可以运行以下命令在本地生成迁移,
python manage.py makemigrations
将迁移添加到git并部署到heroku。 在heroku上运行迁移,
heroku run bash -a 'HEROKU_APP_NAME'
python manage.py migrate
如果使用django> = 1.7,则不应使用syncdb,因为django< 1.7使用南迁移而不是django默认值为deprecated。
答案 1 :(得分:0)
所以我自己想到了这个问题,问题是我忘了通过startapp
创建一个应用程序,只是将我的所有模型,序列化程序等放在项目目录中。创建应用程序后,将所有内容移动到应用程序的文件夹中,并调整所有导入和路径,一切正常。
虽然我也会说,用户peeyush113的建议也是相关的,因为syncdb没有真正起作用,所以我不得不使用makemigrations <app>
然后migrate
。