Python的兼容性很无助

作者: admin 分类: 公众号存档            2 次浏览 发布时间: 2018-07-31 23:59

公众号:杨建荣的学习笔记 · 作者:杨建荣 · 发布:2018-07-31 23:59:45 · 原文链接

今天下午要发布一个版本运维平台的版本,对于线上版本的使用思路是这样的。

  1. 线上版本的数据库变更都是通过SQL语句,即线上环境的数据是最准确,最完整的,同时线上环境不做开发环境的配置。对于数据变更这块,这也是我喜欢Django的唯一理由了。我可以很轻松的通过migrations里面的配置使用sqlmigrate生成对应的SQL语句来,如果有10个变更,那么我可以导出对应的SQL语句,依次部署变更即可。

  2. 测试环境的代码是最新的,代码层面我们内部使用了GitLab来做版本控制,在这个基础上开了分支来适配不同的需求。线上环境不做开发环境的调试和配置,只做发布。

  3. 对于测试环境和线上环境使用两套配置文件,两个文件的配置需要做到基本的同步。线上发布的时候只需要调整配置文件即可。不需要再修改里面的配置了。

    所以一般发布的时候,如果没有数据库变更,那么我只需要把代码同步过去即可,如果有数据变更,则需要并行做这两件事情。

    今天发布的时候,整个过程看起来还顺利,但是启动的时候却抛出了错误,提示是ansible的模块支持有问题。

  4. 直觉的思路就是使用pip来检查,但是发现pip不可用了。最开始以为是pip导致的。修复方法如下:

    1. from pip import main

    2. if __name__ == '__main__':

    3. sys.exit(main())

    修改该文件内容为:

    1. from pip import __main__

    2. if __name__ == '__main__':

    这个算是第一个兼容问题吧。

    紧接着调试,发现没有效果,这是一个要发布的环境出现这样的问题,看起来问题还是比较严重了。问题的难点就在于,目前还无法定位问题的原因。

    所以找同事做了确认,近期没有做过包的变更,我唯一记得的就是前段时间做了pip的升级。

    所以简单确认后,对pip进行降级。

    python -m pip install pip==9.0.1

    但是问题还是没有解决,又找另外的同事继续分析,最后发现原来是一个ansible的版本冲突导致,这台服务器还有另外一个业务的同学在使用,他使用的是2.4版本,而我们这个是2.2版本。

admin

杨建荣,《Oracle DBA工作笔记》《MySQL DBA工作笔记》作者,dbaplus社群发起人之一,腾讯云TVP,现任竞技世界系统部经理,拥有十多年数据库开发和运维经验,目前专注于开源技术、运维自动化和性能调优

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注