Heroku生产环境额外安装psycopg包的原因排查求助
Heroku生产环境额外安装psycopg包的原因排查求助
我有一个基于Python/Django的应用,用Pipfile和Pipfile.lock管理依赖,运行在Heroku-22栈上,采用经典buildpack部署。项目里没有requirements.txt,所以那种因缺失requirements.txt导致的模块找不到问题和我的情况不相关。
我的Pipfile和Pipfile.lock里只指定了psycopg2(不是psycopg2-binary)。测试环境安装的包完全符合预期,但生产环境却多出来一个psycopg包,具体对比如下:
生产环境依赖情况
$ heroku run bash -a my-app-production ~ $ pip freeze | grep -i psyco psycopg==3.2.4 psycopg2==2.9.10
测试环境依赖情况
$ heroku run bash -a my-app-testing ~ $ pip freeze | grep -i psyco psycopg2==2.9.10
测试和生产环境只有一个差异:生产环境开启了服务器端的Pgbouncer连接池。我知道Pgbouncer的依赖里包含psycopg,但根据Heroku的文档,Pgbouncer是运行在数据库服务器上的,并不在应用的dyno里,按道理不该影响应用的依赖安装结果。
另外我本地用Docker容器,通过pipenv install --deploy命令安装依赖(Heroku部署时也是用这个命令),结果完全正常,不会多出psycopg包。
有没有人能帮我排查下这个额外的psycopg包是哪里来的?会不会真的是Pgbouncer导致的?我感觉不太可能,但实在想不到其他环境差异了。
备注:内容来源于stack exchange,提问作者Dušan Maďar
相关产品推荐
相关产品推荐

