【问题标题】:Accessing Sentry models in my Django Project在我的 Django 项目中访问哨兵模型
【发布时间】: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


    【解决方案1】:

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

    Popen 最酷的地方在于,您可以使用参数“env”指定进程的环境

    所以

    my_env = os.environ
    my_env["DJANGO_SETTINGS_MODULE"] = "sentry_configuration_file"
    
    result = Popen(command, shell=True, env=my_env)
    

    工作就像一个魅力。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-16
      • 2022-11-30
      • 1970-01-01
      • 1970-01-01
      • 2012-04-06
      • 1970-01-01
      • 2014-10-11
      • 1970-01-01
      相关资源
      最近更新 更多