我正在开发一个有两个 django 项目的系统。一个服务器和一个客户端。服务器负责管理多个客户端实例。该系统依靠 Sentry/Raven 来处理错误记录。
我的问题是哨兵需要我手动创建和配置每个客户端(哨兵项目)。由于客户端实例的数量很大,我已经不得不在我的服务器项目上手动执行此操作。我试图自动化这个过程,所以当我在服务器上创建一个新客户端时,它会创建一个新的 Sentry 项目。
就像在这个问题中一样,我尝试直接访问我项目中的 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 *”行生成以下错误:
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 失败。
任何指针都会非常感激。
谢谢。