今天周日我又开始折腾我的blog项目了,项目是使用django,并部署在亚马逊EC2上,系统为ubuntu16.04。
调试过程是在我的mac上的虚拟机中完成的,虚拟机中的系统为ubuntu16.04,基本配置与我在EC2上的一致,我是在本地编写代码并测试的,完成后再push到github,服务器端pull后运行。
今天我主要移除了django自带的admin,并使用了自定义的admin,并添加了markdown中直接上传图片等功能,期间我新建并修改了部分models,在本地进行migrate并没有问题,但是当在服务器端migrate时,却报了各种错误。
下面是迁移数据库时遇到的错误和解决访问的方法:
問題:
-
當修改或新增model後, 執行python manage.py makemigrations,未生成遷移:
解決方法:
刪除每個app文件下migrations文件中除了init.py的所有文件,然後再執行python manage.py makemigrations
重新生成遷移 -
數據庫遷移時遇見的問題:
錯誤信息:
django.db.utils.InternalError: (1054, "Unknown column 'name' in 'django_content_type'")
解決方法:
在数据库中手动添加没有创建的字段
alter table django_content_type add column name varchar(10)
- 遷移數據庫python manage.py migrate時出錯:
django.db.utils.InternalError: (1050, "Table 'auth_permission' already exists")
解決方法:
python manage.py migrate --fake
但是此種方法會忽略一些錯誤,導致最終還是不能解決我們的遷移的問題
總結:
我的blog項目是在我的本地電腦ubuntu系統上開發並測試的,然後提交到github上,最後部署到亞馬遜服務器時,通過git命令clone到服務器上;
期間我在本地修改或創建了一些model,這時我在本地生成遷移和遷移時都沒有,但是在服務端遷移總是報錯,導致遷移失敗;
在網上查找各種資料最終都沒有解決,最後我發覺項目的.gitignore中忽略了migrations文件,而每次改變model或新增model時,都會生成一個000n_.py文件,每次改變n都會加1,
此時我的數據庫也會在遷移時發生改變,而當我在服務器執行遷移時,服務器端沒有migrations文件,每次遷移都會重新生成,那麼和本地執行時機不同,所以會需要每次執行遷移時,會根據migrations執行的結果也不同;
解決方法:當然我們可以在gitignore中取消這些忽略文件, 另外當我們在服務器段執行遷移遇到文件時,我們可以把本地的0001_initial.py中的復制到服務端對應的這個文件再
网友评论