当本地为Django 1.7/Postgres 9.3时,如何调试在Django/Postgres 8.4服务器上运行的应用程序?

2024-05-23 21:10:02 发布

您现在位置:Python中文网/ 问答频道 /正文

作为一个Django/Python新手,我应该尝试在运行4年前的软件版本的服务器上调试,尝试在本地重新创建旧的软件安装,还是只尝试在本地macosx10.9.5上运行Django/Python/Postgres/PostGIS的当前版本的软件?你知道吗

背景:

在一个本应将数据加载到Postgres/PostGIS的项目中,我需要调试一个有2010年历史的Django/Postgres/PostGIS项目出现错误的原因。我是一个LAMP开发人员,从来没有使用过Django,也没有在Python中做过很多工作,但是我已经能够在服务器上运行一个临时站点,并进行一两次更改。我认为在macosx10.9.5上进行本地调试是有意义的。所以我用自制软件安装了django1.7和postgres9.3。从版本差异来看,我担心现在迁移和升级项目要比在服务器上运行的staging site实例上调试更麻烦。你知道吗

FWIW,我知道我想研究的代码行(似乎某个对象没有从db中正确加载,因为它在db中),但我不确定要使用哪种echo语句。我喜欢用IDE来检查东西。这个项目有点像孤儿,因为它是开发人员的第一个专业项目,开发人员已经无法提供帮助。当然,最后期限是上周。:(


Tags: 数据项目django版本服务器db软件开发人员
3条回答

使用VirtualEnv模拟必要的Django版本。PostgreSQL更为棘手,理论上,您可以让第二个实例与所需版本同时运行,但这也会导致非常微妙的冲突。最好让它在另一台机器(虚拟或物理)上运行,并通过本地网络访问它。你知道吗

我认为最简单的方法是使用unittestmock object对您怀疑是问题原因的函数设置一些单元测试。通过使用unittest和mock对象,可以控制现有代码如何与Django和Postgres对象交互,并通过设置预期的返回值来允许版本差异。你知道吗

使用mock object,您可以模拟现有Python对象的全部或部分,这减少了开发环境所需的依赖性。根据代码的结构,您可能根本不需要安装Django或Postgres,也不需要安装web服务器。This blog详细解释了Mock对象。你知道吗

尽管时间紧迫,但可能比为整个项目设置单元测试更糟糕,未来的开发人员会感谢您的。你知道吗

就调试而言,我个人无法充分推荐pudb,它是一个交互式命令行调试器,您可以使用unittest来确定代码的哪一部分导致了问题。你知道吗

如果您确实需要安装Django和Postgres,我建议您查看virtualenv,它允许您为Python设置一个虚拟环境。这样,您就可以只安装所需的特定依赖项,而不会干扰全局系统范围的安装。您还可以安装早期版本的软件包,这些软件包可以模拟现有系统的状态。你知道吗

生产环境和开发环境之间的差异可能会引起无数的麻烦。你知道吗

我建议您使用Vagrant之类的工具来设置一个在虚拟机内部运行的开发环境,该虚拟机可以镜像您的生产服务器。你知道吗

相关问题 更多 >