2015-12-24 25 views
2

我有一個Django的網站,我對我的開發工作,混帳推到在線回購的到位桶,然後我把它在使用爲什麼我的生產站點和我的開發站點有不同的遷移?

git pull --no-edit origin master 

當我檢查回購,遷移文件我的生產服務器反映的是我的本地機器上的準確,但是當我ssh到我的服務器,並期待在同一遷移文件,它們是不同的...

爲什麼不將這些文件是相同的,我怎麼能確保他們是相同的,當我嘗試從我的本地數據庫轉儲數據並將其放入主數據庫時,會造成問題。

回答

1

正在發生的事情對你來說可能是在某些時刻你的本地文件沒有與服務器的文件覆蓋。你能做的最好的事情就是把所有東西都放在服務器中。要做到這一點:

git fetch origin 
git reset --hard origin/master 

除此之外,我不會建議上傳遷移文件到服務器。在Django中,它們就像構建文件一樣。考慮到如果您在開發中對模型進行了更改,那麼您必須執行遷移,並且您將獲得一個新文件,例如0002_auto _ *****。假設您不想在生產中進行這種更改,您必須在開發中進行新的遷移,並且您將獲得另一個遷移文件0003_auto _ *****。你不希望在你的生產環境中,對吧?

不理你只需將它添加到文件夾.gitignore遷移。

+1

這就是爲什麼你在git中使用開發分支,並且當它準備好時合併到你的生產分支。 **強烈建議**,您在開發機器上創建您的遷移,測試它們,然後將它們推送到生產環境。儘管Django花費了大量的精力來完成遷移,但遷移並不是安全的。遷移會偶爾會產生不易恢復的錯誤,尤其是當您的數據庫不支持原子模式更改時。你不希望這種情況發生在生產上,所以你應該**總是**在本地測試它們。 – knbk

+0

引用[文檔](https://docs.djangoproject.com/en/1.9/topics/migrations/#the-commands):「每個應用程序的遷移文件都位於該應用程序內的」遷移「目錄中並且被設計爲致力於並作爲其代碼庫的一部分進行分發。你應該在你的開發機器上製作一次,然後在你的同事的機器,登臺機器以及最終你的生產機器上運行相同的遷移。「 – knbk

+0

好吧我猜我不需要他們在生產服務器上,我從來沒有我想如何將每個遷移文件夾添加到gitignore?我必須將絕對路徑添加到每個gitignore,還是有辦法捕獲所有忽略文件夾? – deltaskelta

0

遷移文件在不同的機器上可能不同。例如在本地創建一個模型,然後makemigrations然後遷移。然後你決定推動和拉動生產。然後在本地進行更改,遷移和遷移變更,然後在本地對模型進行更多更改,然後重複遷移並遷移,然後再重複4次,然後決定推動回購並從生產回購中拉回,所以現在您需要對生產進行遷移,並且對於所有4次更改可能只有一次遷移。你應該記住

一件事是,如果你已經有了必要的表,但你有沒有需要執行的遷移,可以遷移他們喜歡:

./manage.py migrate appname 0001 --fake 

所以這個遷移將沒有真正應用結構變化(因爲它已經符合你的需求)

+1

Downvoted出於同樣的原因:**強烈建議**在源代碼管理中進行遷移。如果你需要增量開發,你可以在一個單獨的分支中完成。您可以在將更改合併到生產分支中時創建新的遷移,但**始終**在創建並測試遷移之前將其推送到生產。 – knbk

相關問題