"no such table" django syncdb 通过后 Heroku 出错
"no such table" error on Heroku after django syncdb passed
我正在尝试将我的 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 上创建我的数据库表?
您使用的是什么版本的 django..?
如果您使用的是 django>=1.7,您需要 运行 migrate
添加模型后你需要做的
python manage.py makemigrations
然后 python manage.py migrate
如果您的项目已经包含迁移,您可以直接 运行 python manage.py migrate
命令。
如果您错过了上述任何步骤,请执行此操作。
你不能在 Heroku 上使用 sqlite3。
sqlite 将数据库作为文件存储在磁盘上。但是 Heroku dyno 中的文件系统不是持久的,并且不在 dyno 之间共享。因此,当您执行 heroku run python manage.py migrate
时,Heroku 会启动一个带有空白数据库的新 dyno,运行迁移,然后删除 dyno 和数据库。 运行 您网站的测功机不受影响,永远不会迁移。
您必须使用 Heroku 数据库插件之一。 Postgres 有一个免费层。您应该使用 dj-database-url 库从 Heroku 设置的环境变量动态设置您的数据库设置。
另外,同样的道理,你必须在本地做manage.py makemigrations
,将结果提交到git,然后推送到Heroku。
你可以使用 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
pip install django-heroku
在文件顶部添加 import django_heroku
settings.py
将 django_heroku.settings(locals())
放在 settings.py
的最底部
它会自动配置你的数据库。您可以在他们的 website
上了解更多信息
我正在尝试将我的 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 上创建我的数据库表?
您使用的是什么版本的 django..?
如果您使用的是 django>=1.7,您需要 运行 migrate
添加模型后你需要做的
python manage.py makemigrations
然后 python manage.py migrate
如果您的项目已经包含迁移,您可以直接 运行 python manage.py migrate
命令。
如果您错过了上述任何步骤,请执行此操作。
你不能在 Heroku 上使用 sqlite3。
sqlite 将数据库作为文件存储在磁盘上。但是 Heroku dyno 中的文件系统不是持久的,并且不在 dyno 之间共享。因此,当您执行 heroku run python manage.py migrate
时,Heroku 会启动一个带有空白数据库的新 dyno,运行迁移,然后删除 dyno 和数据库。 运行 您网站的测功机不受影响,永远不会迁移。
您必须使用 Heroku 数据库插件之一。 Postgres 有一个免费层。您应该使用 dj-database-url 库从 Heroku 设置的环境变量动态设置您的数据库设置。
另外,同样的道理,你必须在本地做manage.py makemigrations
,将结果提交到git,然后推送到Heroku。
你可以使用 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
pip install django-heroku
在文件顶部添加 import django_heroku
settings.py
将 django_heroku.settings(locals())
放在 settings.py
它会自动配置你的数据库。您可以在他们的 website
上了解更多信息