Django网站产生的错误,在本地运行时不出现

问题描述:

我有一个在Ubuntu上运行的Django 1.9驱动的网站,我经常遇到一个奇怪的问题,当我从本地PC运行本地项目的克隆时,一些错误消失使用127.0.0.1:8000网址。在这种情况下查找错误极其耗时,我想知道调试大型项目的最佳做法是什么,特别是在网站已经部分使用的情况下。 为了尽可能具体,我提供了一个错误的分步说明。Django网站产生的错误,在本地运行时不出现

第1步:我输入一些网址,说,10.8.0.1:8000/show_students/

步骤2.请在页面上有所动作,比如说,节省了学生档案。该操作没有成功结束,产生错误。

第3步。我将位于远程服务器上的项目目录复制粘贴到我PC上的本地目录中,然后尝试运行CLONE。我发现错误没有发生。

现实生活中的例子,

task_email_recipients = TaskEmailRecipients.objects.get(task_type = 
task_instance.type, legal_entity_own = legal_entity_own_instance) 

此行抛出异常说LegalEntityOwn has no field named(是的,我没有忽略任何东西。这是后“命名字段”空字符串) 如果我从同一个视图127.0.0.1,错误消失。 我应该怎么做?顺便说一句,我使用Eclipse,如果这有什么不同。我的本地电脑上安装了MS Windows 10。

综上,我的目标是从10.8.0.1

UPDATE调试项目运行的保罗 - Becotte的评论 我一直忽略了这一警告,但在运行项目时,它会发出警告

您有未应用的迁移;直到 被应用,您的应用可能无法正常工作。运行'python manage.py migrate'来应用它们。

+2

你是...... A.使用源代码管理? B.使用迁移来控制数据库的模式? C.以自动方式部署您的应用程序?像这样的问题通常来自于部署服务器,然后忘记了这样做,并且更好地控制两个位置实际运行的内容通常会解决这些问题。 –

+0

Paul,请参阅更新后的问题。你能否澄清两点(答案和B)? –

所以,让我来解释一些概念。 A.源代码控制(Git)让你跟踪源代码的所有变化。这非常重要,以便您可以放心地确信,您的开发计算机上的代码与部署的服务器运行的版本相同,而不会尝试执行诸如来回复制文件等操作。像git status这样的命令可以告诉你,如果你改变了一些东西,也许会给你提示两种环境之间有什么不同。如果你不使用git,你应该立即开始!

B.迁移就像数据库模式的源代码控制。像Mysql或Postgres这样的SQL数据库有一个固定的模式 - 你有很多表,带有这些名字,而表A有三列,其中一列叫做名字,一列叫做ID等等。迁移的目的是为了让您了解这些模式是什么 - 而不是登录到数据库并运行您构建的迁移文件,其中包含必要的命令,然后用版本号标记数据库。然后运行这些命令文件,以便如果数据库的版本相同,则知道它们具有相同的结构(这使您可以使本地数据库与部署的数据库相匹配)。 Django内置了一个有用的迁移系统... manage.py migrate是将所有迁移文件应用于当前数据库的命令。如果您收到列出的错误消息,则基本上没有机会使您的应用正常工作,因为您的数据库架构在某处与您的模型文件不同步。根据您非常有限的描述,您将一个字段添加到现在存在于本地数据库中的模型中,但不存在于生产数据库中。

C.我提到了一个部署脚本 - 这是一个可以运行的命令,让您的代码在远程服务器上运行,以确保它每次都以相同的方式发生。在这种情况下,它可能是这样的......

ssh production 
git pull 
python manage.py migrate 
uwsgi 

建立这样一个脚本,让你知道是怎么回事,你可以排除不小心跳过步骤误差向量。