访问我的Django项目中的Sentry模型

时间:2013-11-26 11:31:21

标签: django orm subprocess sentry

我正在研究一个有两个django项目的系统。服务器和客户端。服务器负责管理多个客户端实例。该系统依赖Sentry / Raven来处理错误记录。

我的问题是Sentry需要我手动创建和配置每个客户端(哨兵项目)。由于客户端实例的数量很大,我必须在我的服务器项目上手动执行此操作。我试图自动化该过程,因此当我在服务器上创建一个新客户端时,它会创建一个新的Sentry项目。

this question非常相似,我尝试直接访问项目中的Sentry ORM。但这显示出一个死胡同。所以我写了一个python scrypt来做这个。

在上述脚本中,我从哨兵处导入DJANGO_SETTINGS_MODULE,然后继续使用它,直到我得到我需要的为止。

sys.path.append("/sentry/")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", 'sentry_configuration_file')

from sentry.models import *

#Do my thing here

如果我在shell上运行脚本,它可以完美运行。

但是,当我使用subprocess在我的Django项目中调用它时

from subprocess import call
call("/sentry/venv/bin/python /sentry/my_script.py", shell=True)

该脚本在“from sentry.models import * line:

上生成以下错误
ImportError("Could not import settings '%s' (Is it on sys.path?): %s" % (self.SETTINGS_MODULE, e))
ImportError: Could not import settings 'configurations.settings' (Is it on sys.path?): No module named configurations.settings

您可能已经注意到哨兵安装在virtualenv中。但是,当我在bash上调用这个脚本时,我不需要激活它,只要我提供了virtualenv的python的正确路径。

我迷失在这里。我认为没有理由让脚本在使用shell运行正常时使用subprocess.call失败。

任何指针都会被大大贬低。

感谢。

1 个答案:

答案 0 :(得分:2)

如果有人遇到过这个问题,我设法通过subprocess.Popen替换subprocess.call来解决问题.Popen

Popen很酷的一点是,您可以使用参数“env”指定流程的环境

所以

my_env = os.environ
my_env["DJANGO_SETTINGS_MODULE"] = "sentry_configuration_file"

result = Popen(command, shell=True, env=my_env)

像魅力一样工作。