为现有Django应用程序部署到实时服务器。这是一个非常古老的网站,3年多来一直没有更新。
我被聘用合同以使其更新,其中包括将Django版本升级为最新版本。这打破了网站上许多必须修复的东西。
我做了一个测试部署,它很顺利。现在是部署生活的时候了,我遇到了一些问题......
我要做的第一件事是在服务器上记录当前的Django版本,包括我们可以回滚的任何问题。我尝试登录Python命令提示符并导入Django以查找版本号,它说Django没有找到。
我正在进一步寻找并在pip requirements.txt文件中找到该版本。
然后我决定更新服务器上的实际django版本。更新顺利进行。然后我检查了实时网站,一切都没有改变(旧文件仍然存在)。大部分网站都应该被打破。它没有认识到Django的任何变化。
我假设这可能是最后一个承包商使用virtualenv的原因?这就是为什么它不能识别Django,或者Django更新没有对现场网站做任何事情?
这是我能解释这个问题的唯一原因,因为有一个pip requirements.txt文件,他可能用pip安装了Django,这意味着Python应该识别Django的路径。
然后,我将尝试使用命令“lsvirtualenv”找到virtualenv的源路径。但是当我这样做时,即使这样也会给我一个“命令未找到”错误。
我唯一的猜测是,这是一个没有这个命令的virtualenv的旧版本?如果情况并非如此,我不确定发生了什么。
关于如何使用我可以访问的工具找到更新此服务器上的软件包版本所需的信息的任何建议?
答案 0 :(得分:2)
如果全部失败,只需从virtualenv
重新创建requirements.txt
并从那里开始
如果你坚持找到旧的,IMO最直接的方法是找到生产Django应用程序的方式。查找启动它的bash脚本,一些supervisor
条目等
如果您发现它是如何开始的,那么您可以查明它所启动的环境(例如哪个virtualenv)
除此之外,您可以使用find
或locate
命令搜索我们知道存在于lib/pythonX.Y/site-packages
,bin/activate
或bin/python
等虚拟文件中的文件等
答案 1 :(得分:0)
为什么不开始检查进程实际正在运行,以及使用ps auxf
或类似的东西使用什么命令行。然后你知道它的nginx + uwsgi或django-devserver是什么,甚至可能看到virtualenv路径,如果它是非常手动启动的话。然后,查看您找到的服务器的配置文件。
或者,例如,使用netstat -taupen
环顾四周,哪些进程正在侦听哪些端口。更有意义的是,如果有像nginx这样的反向代理或任何正在运行的代理,并且你知道它代理了它。
requirements.txt我完全忽略了。一旦激活并运行pip freeze
,您将从virtualenv获得相同但正确的信息。该文件充其量是多余的,在最坏的情况下会产生误导。