通过终端 (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 导致在开发中工作的生产失败。