在部署前安全运行迁移
django-safemigrate的Python项目详细描述
django safemigrate向django添加一个safemigrate命令 以便在部署时安全地运行迁移命令。
用法
安装django-safemigrate,然后将其添加到 INSTALLED_APPS在设置文件中:
INSTALLED_APPS=[# ..."django_safemigrate.apps.SafeMigrateConfig",]
然后标记可能运行的任何迁移 在部署前阶段, 例如添加列的迁移。
fromdjango_safemigrateimportSafeclassMigration(migrations.Migration):safe=Safe.before_deploy
此时,您可以运行safemigratedjango命令 运行迁移,并且只运行这些迁移。 但是,如果以前运行的迁移不安全 部署的代码是此迁移的依赖项, 然后这些迁移将被阻止,并且安全迁移 命令将失败并出现错误。
当代码完全部署后,只需运行普通的migrate django命令,它仍然正常工作。 例如,可以将命令添加到发布阶段 对于你的Heroku应用程序,安全迁移将运行 在升级新版本时自动执行。
安全选项
对于 safe迁移的属性。
Safe.before_deploy
此迁移只有在部署代码更改之前才能安全运行。 例如,向模型添加新字段的迁移。
Safe.after_deploy
只有在部署了代码更改之后,才能安全地运行此迁移。 如果未给定safe属性,则应用此默认值。 例如,从模型中删除字段的迁移。
Safe.always
此迁移可以在之前和之后安全运行 代码更改已部署。 例如,更改字段help_text的迁移。
非价格模式
在正常操作下,如果有迁移 必须在依赖于 在任何标记为在部署后运行的迁移上 (或未标记) 该命令将引发一个错误以指示 有受保护的迁移 应该已经跑了,但还没跑, 正在阻止预期运行的迁移。
然而,在开发过程中,这些 会在开发人员之间积累, 既然可以接受停工 在发展的过渡时期, 最好是允许命令继续而不升高。
要启用非价格模式,请添加SAFEMIGRATE设置:
SAFEMIGRATE="nonstrict"
在此模式下,safemigrate将运行所有迁移 不会被任何不安全迁移阻止的。 任何剩余的迁移都可以在 使用普通的migratedjango命令。