在我的生产服务器上发生了一个非常奇怪的问题,它没有出现在UAT或我的开发环境中。堆栈设置为Ubuntu 14LTS、Apache2、Python 2.7、Celery、RabbitMQ、Django 1.6。
它的工作原理是,每当需要生成excel报告时,都会调用一个异步任务。根据公司的类型,会创建不同的报告并通过电子邮件发送给登录用户。创建不同报告的函数都放在一个名为report_lib.py的文件中,它们不会从任何其他应用程序导入。代码如下:
if policies.carrier == "class_one":
report_lib.create_remittance_class_one_report(company_id)
else:
report_lib.create_generic_remittance_report(company_id)
得到这个,第一个条件工作没有问题。第二个条件在我没有公司类型集时有效(如预期的那样有效),但对于任何其他类,它都会失败,并出现以下错误:
[2014-10-27 17:56:55,271: WARNING/Worker-1] There was an error: 'module' object has no attribute 'create_generic_remittance_report'
为了让事情变得更有趣,我删除了条件,并默认为在所有情况下只调用"create_generic_remittance_report"函数的代码,它的工作方式不会抱怨该模块。
我99%确信没有循环引用。哦,被引用的库在django项目中使用的唯一应用程序下。这可能是编译器缓存问题吗?有人在使用相同的设置时遇到过类似的问题吗?
请帮忙!
发现问题时,被引用的函数缩进了一个额外的制表符。我想由于芹菜只调用它,所以它返回时出现了那个错误。