依赖关系搞死人啊

2015-07-23 15:00:05 +08:00
 julyclyde
昨天有一段代码,自己机器上正常,放到线上就挂了
OAuth1 client的程序,用requests-oauthlib依赖oauthlib

我自己机器上oauthlib==0.7.2 以前装的旧版本;线上服务器pip下载1.0.0
结果发现其中signature.py内容改了,算法用pyjwt库实现,但oauthlib本身不强制依赖pyjwt,而是oauthlib[signedtoken]才依赖pyjwt,坑死人

然后,装吧,又发现pyjwt依赖的cffi现场编译需要libffi-dev库。真是……最后定稿是给线上也用旧的oauthlib==0.7.2

转到新岗位才7个工作日就搞出19分钟大事故。唉~
5615 次点击
所在节点    Python
31 条回复
realpg
2015-07-23 15:03:01 +08:00
我不是搞python的,对你说的问题细节不太清楚

我只有一个问题

为啥你们公司允许开发环境使用跟生产服务器不一样的版本的东西?
clino
2015-07-23 15:06:29 +08:00
没有一个和生产环境一致的测试环境先试试看?
mhycy
2015-07-23 15:08:13 +08:00
别的不说,改线上环境居然能造成19分钟停机,入口负载均衡怎么做的,没备机做平滑升级?
nellace
2015-07-23 15:18:34 +08:00
19分钟就是大事故了,肯定是个大厂啊
neoblackcap
2015-07-23 15:29:25 +08:00
我只是好奇,为什么你们生产环境可以连开发环境的版本号都对不上
learnshare
2015-07-23 15:52:55 +08:00
必须保证开发和运行环境统一,还得随手把第三方包升级了
ChangxuBlack
2015-07-23 15:55:04 +08:00
或许可以试试用setuptools管理依赖
glasslion
2015-07-23 15:55:42 +08:00
开发环境和生产环境的版本号都能搞得不一样, 出大事故不是早晚的事.

而且当你们发现了版本号不一致的问题后, 为什么不第一时间回退到 0.7.2 这个老的可行版本, 反而去尝试去安装 1.0 这个你们从来没有使用和测试过的版本.
yueyoum
2015-07-23 16:03:45 +08:00
新人都这样, 遇到问题 不要慌

先去问老员工。


当年 我去线上 重启服务, 没看清, 把其他服务给重启了, 而且重启还失败了。。。
julyclyde
2015-07-23 16:28:39 +08:00
@glasslion 请你注意先后顺序。我是回滚了代码之后才检查到0.7.2和1.0.0的问题的
laoyuan
2015-07-23 16:35:01 +08:00
怪不得 Rails Gemfile 里面的gem 后面都跟着版本号,我初学觉得好麻烦啊
est
2015-07-23 16:38:21 +08:00
@laoyuan pip也可以,只是很多人懒得这么干而已。其实现在pip都支持打包成静态包了。
julyclyde
2015-07-23 16:43:01 +08:00
@mhycy 访问到我改的那个位置的时候才出错,错误信息是无法import jwt库,当时没理解为什么还有jwt。我还以为是别人的bug就没当场回滚。有部署权限的人太多也是个麻烦事啊
julyclyde
2015-07-23 16:43:33 +08:00
@ChangxuBlack pip就是setuptools的包装吧。给点儿建设性的意见
julyclyde
2015-07-23 16:44:28 +08:00
@glasslion 现在线上用旧版本,已经积习难改了。我怀疑将来requirements内部会有版本冲突
julyclyde
2015-07-23 16:44:44 +08:00
@learnshare 我这就是随手升级了才坏事的。
poorguy
2015-07-23 17:07:03 +08:00
我就弱弱的问一下,没用virtualenv之类的吗
julyclyde
2015-07-23 17:40:20 +08:00
@poorguy 有。但这和virtualenv有啥关系?
tabris17
2015-07-23 18:31:18 +08:00
为了避免麻烦,我把第三方库的代码复制出来和代码放一起打包了
ChangxuBlack
2015-07-23 22:27:05 +08:00
@julyclyde 你可以写个setup.py,里面写上依赖啊,然后部署的时候用python setup.py install

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/207804

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX