我正在按照Symfony 的 Test-Guide為單元測驗設定測驗環境。但是,每次我部署測驗資料庫時,最終表格看起來都與生產資料庫中的原始表格略有不同。
這意味著
- 一些列出現在表格的另一個位置
- 一些索引/鍵丟失或添加
- 從 prod-db 復制的一些索引/鍵在 test-db 中是唯一的,但原件不是
我使用遷移檔案來構建生產資料庫。也許我在生產資料庫設定方面以錯誤的順序進行測驗資料庫設定?
這就是我正在做的事情:
| 步 | 行動 | 命令 |
|---|---|---|
| 1 | 洗掉所有資料庫 | mysql -e "DROP DATABASE prod_db" //... |
| 2 | 添加生產資料庫 | mysql -e "CREATE DATABASE prod_db" |
| 3 | 為生產資料庫執行遷移 | php bin/console doctrine:migrations:migrate |
| 4 | 添加測驗資料庫 | php bin/console --env=test doctrine:database:create |
| 5 | 創建 test-db 模式 | php bin/console --env=test doctrine:schema:create |
問:產生差異的原因是什么?
uj5u.com熱心網友回復:
最簡單的答案是,這些模式實際上是不同的:雖然doctrine:schema:create針對您的物體動態生成所需的 DDL,但它會執行您(可能在命令的幫助下)之前定義doctrine:migrations:migrate的一系列 SQL 陳述句。make:migration
對您的物體進行小幅更改并忘記創建相應的遷移非常容易。
要檢查生產中有什么不同(即您忘記添加到遷移中的內容),您可以:
- 使用
bin/console make:migration. 這將創建一個缺少句子的新遷移。 - 只需檢查更改
bin/console doctrine:schema:update --dump-sql。
TL;DR 要使您的測驗資料庫與生產資料庫匹配,請使用以下命令代替您的第 5 個命令:
bin/console doctrine:migrations:migrate -e test
這將加載相同的 SQL,使它們匹配。
獎勵:你也可以使用 symfony 命令截斷你的資料庫:如果你改變了你的資料庫引擎,教義會處理它(-e根據需要添加標志):
bin/console doctrine:database:drop --force && bin/console doctrine:database:create
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/425507.html
上一篇:prod環境中未捕獲500個錯誤
