管理更适合外部模式迁移的自动更新和演进
tgext.evolve的Python项目详细描述
evolve是一个TurboGears2扩展,用于一般迁移和演化
tgext.evolve可以安全地用于多处理和多线程环境 因为它依赖于数据库上的分布式锁来执行演进。
在演化期间,应用程序将用503状态代码响应, 您可以随意配置TurboGears来捕获它,并使用您的错误控制器来提供 自定义页。
安装
tgext.evolve可以从pypi安装:
pip install tgext.evolve
应该只对大多数用户有效。
启用
在应用程序中启用tgext.evolve config/app_cfg.py以下各项:
import tgext.evolve tgext.evolve.plugme(base_config, options={ 'evolutions': [ # ... Your evolutions ... ] })
或者您可以使用tgext.pluggable当可用时:
from tgext.pluggable import plug plug(base_config, 'tgext.evolve', evolutions=[ # ... Your evolutions ... ])
然后可以使用^{tt3}禁用tgext.evolve$ 配置文件中的选项在测试套件中经常出现这种情况
使用进化
进化是tgext.evolve.Evolution的一个子类 必须提供evolution_id属性和evolve() 方法
下面是一个不需要等待10秒的示例演进:
import time from tgext.evolve import Evolution class TestEvolution1(Evolution): evolution_id = 'test_evolution_1' def evolve(self): time.sleep(10)
请注意,如果您修改数据或触摸数据库 通过model.DBSession或其他方式,您必须flush 以及commit您的工作单元和事务本身作为演进 在事务管理器外部的独立线程中执行。
然后你就可以用这样的东西来记录你的进化:
from tgext.pluggable import plug plug(base_config, 'tgext.evolve', evolutions=[ TestEvolution1 ])
如果你的进化需要参数,你可以注册一个 它的实例,而不是注册类
注意
没有与evolve()方法相反的方法,因为没有 保证进化是可逆的。如果你需要的话 数据库架构的可逆迁移请使用 架构迁移框架。
更改日志
0.0.5
- 小错误修复和抨击园艺
0.0.4
- 小型python3兼容性修复程序
0.0.3
- 对SQLAlchemy的实验性支持,在SQLite和MySQL上进行了测试
0.0.2
- 允许在.ini文件中使用tgext.evolve.enabled = False禁用tgext.evolve
0.0.1
- 只支持MongoDB/Ming的第一个版本。