我正在考虑将基于Django的站点从框架的v1.4升级到v1.9。该站点在我们的基础设施中扮演着重要的角色,并且可以看到可观的流量。我们的测试套件很好,但还没有达到100%的覆盖率。正因为如此,我希望以安全和保守的方式进行升级。在
我受到了Github最近对rewriting major features的方法的启发,它将新代码和旧代码作为实验和控件运行,返回旧代码的结果并记录新代码中的任何差异或错误。在
因为我正在升级框架版本本身(以及支持库),所以我不能只使用一个Python的Scientist端口,比如laboratory。在我看来,最简单的方法就是分离站点本身,将每个请求发送到两个站点,但只从控制站点提交并返回结果。在
为此,我需要实验站点在与控制站点相同的数据库上运行,但不进行提交。在我看来,我应该能够通过编写某种中间件来实现这一点,在请求-响应周期结束时回滚当前事务,但我不确定如何实现这一点。在
所以,我的问题是:如何将每个请求的每个事务回滚到django1.9站点?
更新:
经过进一步的研究,我似乎可以通过启用^{
如果要使用
@transaction.atomic
并仍然管理异常,可以将其与with
语句一起使用:您应该像使用注释
@transaction.atomic()
事务回滚
第一个选项是回滚整个事务。例如:
调用
transaction.rollback()
回滚整个事务。任何 未提交的数据库操作将丢失。在本例中,更改 由a.save()
生成的操作将丢失,即使该操作未引发任何错误 本身。在为了更好地理解,只需检查transaction
相关问题 更多 >
编程相关推荐