2018年9月13日 星期四
Rails schema 到底怎麼保持乾淨
在不能 access production database 的情況下:
1. 怎麼保持 local database schema 是乾淨的
2. 如果髒了,怎麼恢復成乾淨的而且不影響現在 local 有的資料(乾淨的資料恢復,不乾淨的就丟掉)
## Idea 1:
Rails 內建的一些方法
要把 db 弄乾淨最簡單就是
db:drop, db:create, db:schema:load
直接 db:schema:load 的話不會刪掉多的 table
https://stackoverflow.com/questions/10301794/difference-between-rake-dbmigrate-dbreset-and-dbschemaload
問題:
1. db 資料會被清空
2. 必須仰賴 db:seed 保持乾淨並 up to date
## Idea 2:
dump db 出來,在 restore 的時候選擇性的 restore
pg_dump test-docker_development -c > tmp/dirty_dump.sql
問題:
1. schema_migration 的 table 會是錯的,不好改
2. pg_restroe 會暴力的把 table 內的資料結構改掉(如果不一樣),可能會造成 table 跟schema 不符合的問題
## Idea 3:
有一台只跟 production 跑一樣環境的機器,從上面要資料
問題:
1. 若 production 跑 task,這台機器也要跟著跑,不然資料一樣是錯的
## Conclusion
db:seed 檔就是為此而生的,但之所以會沒有人更新的原因是大家並沒有很常需要用到 seed 檔案,例如 deploy 到 staging 測試時 staging 本來就會有測試的舊資料(雖然很髒),所以不需要跑 seed,對 developer 而言也就不會 care 這麼多,反正這次我可以測就好,下次有人有問題再說。
所以問題就變成「要讓 seed 檔案在開發以及測試過程中扮演重要角色,這樣才有可能維護一個乾淨的 local 開發 schema & data」
要做到提升 seed 重要性就要改 Staging 測試的方式,例如讓 staging 用類似 docker container 的技術每次測試的時候都跑一個新的 App 並執行 seed,這樣就會強迫 developer 更新 seed 而且保持開發和測試效率
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言