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

时间:2015-04-21 08:27:11

标签: python django git heroku

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

git push heroku master
heroku run python manage.py syncdb

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

OperationalError no such table: user_user

当我尝试

heroku run python manage.py makemigrations    
heroku run python manage.py migrate
heroku run python manage.py createsuperuser

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

django.db.utils.OperationalError: no such table: user_user

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

我的数据库设置为:

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

我的用户模型是:

class User(AbstractUser):
    rating = models.PositiveIntegerField(default=settings.DEFAULT_USER_RATING)

Django版本是1.7.1。

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

4 个答案:

答案 0 :(得分:11)

你不能在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。

答案 1 :(得分:5)

您可以使用 postgresql

settings.py添加(在文件末尾):

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

requirements.txt添加:

dj-database-url 
psycopg2

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

答案 2 :(得分:1)

您使用的是什么版本的django ..?

如果您使用的是django> = 1.7,则需要运行migrate

添加模型后,您需要执行此操作 python manage.py makemigrations然后python manage.py migrate

如果您的项目已包含迁移,则可以直接运行python manage.py migrate命令。

如果您错过了上述任何步骤,请执行此操作。

答案 3 :(得分:1)

<record id="info_arch_user_rule" model="ir.rule"> <field name="name">See all</field> <field name="model_id" ref="model_info_med"/> <field name="domain_force"> [(1, '=', 1)] </field> <field name="groups" eval="[(4, ref('informed.group_user'))]"/> </record>

在文件pip install django-heroku的顶部添加import django-heroku

settings.py放在django_heroku.settings(locals())的最底端

它将自动配置您的数据库。