django syncdb传递后,Heroku上的"没有这样的表"错误

Vad*_*nov 8 python git django heroku

我正在尝试将我的Django应用程序部署到Heroku.迁移在我当地的Git中.当我尝试:

git push heroku master
heroku run python manage.py syncdb
Run Code Online (Sandbox Code Playgroud)

它应用迁移并且还促使我创建超级用户,我成功地做了.现在应用程序已启动并运行,但是当我尝试登录Django管理员时它正在抛出:

OperationalError no such table: user_user
Run Code Online (Sandbox Code Playgroud)

当我尝试

heroku run python manage.py makemigrations    
heroku run python manage.py migrate
heroku run python manage.py createsuperuser
Run Code Online (Sandbox Code Playgroud)

它适用于所有迁移,但无法创建超级用户抛出:

django.db.utils.OperationalError: no such table: user_user
Run Code Online (Sandbox Code Playgroud)

无论哪种方式,我都无法在Heroku上设置和迁移我的数据库.

我的数据库设置是:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}
Run Code Online (Sandbox Code Playgroud)

我的用户模型是:

class User(AbstractUser):
    rating = models.PositiveIntegerField(default=settings.DEFAULT_USER_RATING)
Run Code Online (Sandbox Code Playgroud)

Django版本是1.7.1.

如何获取在Heroku上创建的数据库表?

Dan*_*man 12

你不能在Heroku上使用sqlite3.

sqlite将数据库存储为磁盘上的文件.但是Heroku dyno中的文件系统不是持久的,并且不会在dynos之间共享.所以,当你这样做的时候heroku run python manage.py migrate,Heroku用空白数据库旋转一个新的dyno,运行迁移,然后删除dyno和数据库.运行您站点的dyno不受影响,永远不会迁移.

您必须使用Heroku数据库加载项之一.Postgres有免费套餐.您应该使用dj-database-url库从Heroku设置的环境变量动态设置数据库设置.

另外,出于同样的原因,你必须在manage.py makemigrations本地做,将结果提交给git,然后推送到Heroku.


suh*_*lvs 6

你可以使用postgresql:

另外settings.py(在文件末尾):

# ie if Heroku server
if 'DATABASE_URL' in os.environ:
    import dj_database_url
    DATABASES = {'default': dj_database_url.config()}
Run Code Online (Sandbox Code Playgroud)

另外requirements.txt:

dj-database-url 
psycopg2
Run Code Online (Sandbox Code Playgroud)

现在你可以运行: heroku run python manage.py migrate


小智 5

pip install django-heroku

添加import django_heroku到文件顶部settings.py

放置django_heroku.settings(locals())在最底部settings.py

它会自动配置您的数据库。您可以在他们的网站上了解更多信息