【发布时间】:2013-11-26 11:31:20
【问题描述】:
我正在开发一个有两个 django 项目的系统。一个服务器和一个客户端。服务器负责管理多个客户端实例。该系统依靠 Sentry/Raven 来处理错误记录。
我的问题是哨兵需要我手动创建和配置每个客户端(哨兵项目)。由于客户端实例的数量很大,我已经不得不在我的服务器项目上手动执行此操作。我试图自动化这个过程,所以当我在服务器上创建一个新客户端时,它会创建一个新的 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 上运行脚本,它会完美运行。
但是,当我在我的 Django 项目中使用 subprocess 调用它时
from subprocess import call
call("/sentry/venv/bin/python /sentry/my_script.py", shell=True)
脚本在“from sentry.models import * 行生成以下错误:
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
您可能已经注意到 sentry 安装在 virtualenv 中。但是,当我在我的 bash 上调用这个脚本时,我不需要激活它,只要我提供了 virtualenv 的 python 的正确路径。
我迷路了。我认为脚本在使用 shell 运行良好时使用 subprocess.call 会失败。
任何指针都将不胜感激。
谢谢。
【问题讨论】:
标签: django orm subprocess sentry