通过终端(Django)删除db.sqlite



我目前正在将一个项目部署到Heroku,但它返回以下错误:ValueError:无法解析相关模型"store.user"。

但有一种方法可以在本地避免这种错误。你只需:

py manage.py migrate store

然后

py manage.py migrate

换句话说,如果我单独迁移,我就不会面临这样的错误。然而,Heroku会一起迁移,然后部署会因为这个错误而失败。

如果我像Heroku那样在本地进行,即运行

py manage.py migrate

我可以毫不费力地点击并删除db.sqlite3文件,并分别进行迁移和迁移。然后这个问题就会得到解决。然而,当部署到Heroku时,这是不可能的。因此,如何仅通过终端删除此文件?我一直在搜索,但人们只说你点击文件并删除它,这对我来说是不可能的。

感谢

然而,Heroku将所有迁移到一起,然后部署失败,因为这个错误

Heroku不做任何事情。

只有当你告诉Heroku时,迁移才会在Heroku上运行,或者运行之类的程序

heroku run python manage.py migrate

或者因为您已经声明了一个发布过程,该过程应该在部署新版本时运行,例如:

web: gunicorn app.wsgi
release: python manage.py migrate

在这两种情况下,都由您负责该命令。如果您不想每次部署都运行python manage.py migrate,请从Procfile中删除release进程。

如果我单独迁移,我不会面临这样的错误

这令人担忧。

这可能有几个原因。一个常见的问题是迁移中缺少依赖项。如果您在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的文件系统是短暂的。它在构建时会被烘焙到你的应用程序中,每次你的dyno重新启动时,你对它所做的任何更改都会被重置。这种情况经常发生(每天至少一次(。

这意味着您无法有效地删除数据库文件。但这也意味着你不能保存数据,并期望它在以后查找时出现!SQLite不太适合Heroku。

像PostgreSQL这样的客户端-服务器数据库是一个更好的选择。Heroku提供自己的免费Postgres服务。

如果你转换,我强烈敦促你也转换开发。Django的ORM使更改相对容易,但数据库引擎并不是彼此的替代品。我见过在SQLite上开发并部署到Postgres或MySQL会导致开发中的生产失败的真实例子。

最新更新