通过终端 (Django) 删除 db.sqlite
Delete db.sqlite via terminal (Django)
我目前正在将一个项目部署到 Heroku,但是 returns 我遇到了以下错误:ValueError:相关模型 'store.user' 无法解析。
但是有一种方法可以在本地避免此类错误。你只需要做:
py manage.py migrate store
然后
py manage.py migrate
换句话说,如果我单独迁移,就不会出现这样的错误。然而,Heroku 一起迁移,然后部署失败,因为这个错误。
如果我像 Heroku 那样在本地进行,即 运行
py manage.py migrate
我可以毫不费力地单击并删除 db.sqlite3 文件,然后 makemigrations 并单独迁移。那么问题就迎刃而解了。但是,部署到 Heroku 时这是不可能的。因此,如何仅通过终端删除此文件?我一直在搜索,但人们只说您单击该文件并将其删除,这对我来说是不可能的。
谢谢
However, Heroku migrates all together, then the deploy fails because of this error
Heroku 什么都不做。
只有在 Heroku 上迁移 运行 当你告诉他们时,或者通过 运行ning 之类的东西
heroku run python manage.py migrate
或者因为您已经声明了在部署新版本时应该 运行 的发布过程,例如:
web: gunicorn app.wsgi
release: python manage.py migrate
在这两种情况下,您负责该命令是什么。如果您不想在每次部署时都 运行 python manage.py migrate
,请从 Procfile
.
中删除 release
进程
if I migrate separately, I won't face such error
这令人担忧。
这可能有多种原因。一个常见问题是您的迁移中缺少 dependencies。如果您在 app1
中编写依赖于 app2
中现有的某些模型和表的迁移,则需要向 app1
中的相关迁移添加依赖项,例如类似于文档中的示例:
class Migration(migrations.Migration):
dependencies = [
('app1', '0001_initial'),
# added dependency to enable using models from app2 in move_m1
('app2', '0004_foobar'),
]
operations = [
migrations.RunPython(move_m1),
]
如果迁移编写得当,以便它们准确反映每次提交中的代码、相互构建、声明依赖关系等。您应该始终能够安全地将它们应用到您的数据库。
最后,你问删除db.sqlite
。
Heroku's filesystem is ephemeral。它在构建时被嵌入到你的应用程序 slug 中,并且你对它所做的任何更改都会在每次你的 dyno 重新启动时重置。这种情况经常发生(每天至少一次)。
这意味着您不能有效地删除您的数据库文件。但这也意味着您不能保存数据并期望它在您以后查找时就在那里! SQLite 不适合 Heroku。
像 PostgreSQL 这样的 client-server 数据库是更好的选择。 Heroku 提供 its own Postgres service 免费套餐。
如果你切换,我强烈建议你在开发中也切换。 Django 的 ORM 使其相对容易更改,但数据库引擎不能 drop-in 相互替代。我见过 real-world 个例子,其中在 SQLite 上开发并部署到 Postgres 或 MySQL 导致在开发中工作的生产失败。
我目前正在将一个项目部署到 Heroku,但是 returns 我遇到了以下错误:ValueError:相关模型 'store.user' 无法解析。
但是有一种方法可以在本地避免此类错误。你只需要做:
py manage.py migrate store
然后
py manage.py migrate
换句话说,如果我单独迁移,就不会出现这样的错误。然而,Heroku 一起迁移,然后部署失败,因为这个错误。
如果我像 Heroku 那样在本地进行,即 运行
py manage.py migrate
我可以毫不费力地单击并删除 db.sqlite3 文件,然后 makemigrations 并单独迁移。那么问题就迎刃而解了。但是,部署到 Heroku 时这是不可能的。因此,如何仅通过终端删除此文件?我一直在搜索,但人们只说您单击该文件并将其删除,这对我来说是不可能的。
谢谢
However, Heroku migrates all together, then the deploy fails because of this error
Heroku 什么都不做。
只有在 Heroku 上迁移 运行 当你告诉他们时,或者通过 运行ning 之类的东西
heroku run python manage.py migrate
或者因为您已经声明了在部署新版本时应该 运行 的发布过程,例如:
web: gunicorn app.wsgi
release: python manage.py migrate
在这两种情况下,您负责该命令是什么。如果您不想在每次部署时都 运行 python manage.py migrate
,请从 Procfile
.
release
进程
if I migrate separately, I won't face such error
这令人担忧。
这可能有多种原因。一个常见问题是您的迁移中缺少 dependencies。如果您在 app1
中编写依赖于 app2
中现有的某些模型和表的迁移,则需要向 app1
中的相关迁移添加依赖项,例如类似于文档中的示例:
class Migration(migrations.Migration):
dependencies = [
('app1', '0001_initial'),
# added dependency to enable using models from app2 in move_m1
('app2', '0004_foobar'),
]
operations = [
migrations.RunPython(move_m1),
]
如果迁移编写得当,以便它们准确反映每次提交中的代码、相互构建、声明依赖关系等。您应该始终能够安全地将它们应用到您的数据库。
最后,你问删除db.sqlite
。
Heroku's filesystem is ephemeral。它在构建时被嵌入到你的应用程序 slug 中,并且你对它所做的任何更改都会在每次你的 dyno 重新启动时重置。这种情况经常发生(每天至少一次)。
这意味着您不能有效地删除您的数据库文件。但这也意味着您不能保存数据并期望它在您以后查找时就在那里! SQLite 不适合 Heroku。
像 PostgreSQL 这样的 client-server 数据库是更好的选择。 Heroku 提供 its own Postgres service 免费套餐。
如果你切换,我强烈建议你在开发中也切换。 Django 的 ORM 使其相对容易更改,但数据库引擎不能 drop-in 相互替代。我见过 real-world 个例子,其中在 SQLite 上开发并部署到 Postgres 或 MySQL 导致在开发中工作的生产失败。