为什么我的生产站点和我的开发站点有不同的迁移?

时间:2015-12-24 05:23:04

标签: django git

我有一个django网站,我在我的开发工作,git将它推送到bitbucket的在线仓库,然后我使用

将它拉到我的生产服务器上
git pull --no-edit origin master

当我检查repo时,迁移文件完全反映了我本地计算机上的内容,但当我ssh到我的服务器并查看相同的迁移文件时,它们是不同的......

为什么这些文件不相同,如何确保它们是相同的,当我尝试从本地数据库转储数据并将其放入主数据库时,它会导致问题。

2 个答案:

答案 0 :(得分:1)

发生了什么事可能是在某些时候你的本地文件没有覆盖服务器的文件。您可以做的最好的事情就是将所有内容完全放在服务器中。要做到这一点:

git fetch origin
git reset --hard origin/master

除此之外,我不建议将迁移文件上传到服务器。在django中,它们就像构建文件一样。考虑到如果您在开发中对模型进行更改,那么您必须进行迁移,并且您将获得像0002_auto _ *****这样的新文件。想象一下,您不希望在生产中进行此更改,您必须在开发中进行新的迁移,并且您将获得另一个迁移文件0003_auto _ *****。你不希望在生产环境中使用它,对吧?

要忽略文件夹迁移,您只需将其添加到.gitignore即可。

答案 1 :(得分:0)

不同计算机上的迁移文件可能不同。例如,在本地创建模型然后makemigrations然后迁移。然后你决定推动生产。然后在本地进行更改,makemigrate和迁移更改,然后在本地对模型进行更多更改并重复makemigrations并进行迁移,然后再次执行4次,然后您决定推送回购并从repo中提取生产,所以现在你需要制作生产版本,并且可能只有一次迁移,所有4次更改。

您应该记住的一件事是,如果您已经拥有必要的表,但是您有不需要执行的迁移,则可以将它们迁移为:

./manage.py migrate appname 0001 --fake

所以这种迁移将在不改变结构的情况下应用(因为它已经满足您的需求)