2013-11-26 1 views
1

Я работаю над системой, которая имеет два проекта django. Сервер и клиент. Сервер отвечает за управление несколькими экземплярами клиента. Эта система использует Sentry/Raven для обработки журнала ошибок.Доступ к моделям Sentry в моем проекте Django

Моя проблема заключается в том, что Sentry мне нужно создавать и настраивать каждый клиент (часовой проект) вручную. Поскольку количество экземпляров клиента велико, и я уже должен сделать это вручную на моем проекте сервера. Я пытался автоматизировать процесс, поэтому, когда я создаю нового клиента на сервере, он создает новый проект Sentry.

Как и в случае с this question, я пытался получить доступ непосредственно к Sentry ORM в моем проекте. Но это оказалось тупиком. Поэтому я написал скрипт python, чтобы сделать это.

В этом скрипте я импортирую DJANGO_SETTINGS_MODULE из часового и работаю с ним, пока у меня не будет того, что мне нужно.

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

from sentry.models import * 

#Do my thing here 

Если я запускаю скрипт на своей оболочке, он работает отлично.

Однако, когда я использую подпроцесс назвать его внутри моего проекта Django

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

Скрипт генерирует следующее сообщение об ошибке на «от sentry.models импорта * линия:

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 

You возможно, заметили, что чат установлен внутри virtualenv. Однако мне не нужно активировать его, когда я вызываю этот скрипт в моем bash, пока я предоставляю правильный путь к питону virtualenv.

Я здесь потерялся. Я не вижу причин, в частности, для отказа сценария с использованием subprocess.call, когда он работает отлично, используя оболочку.

Любые указатели были бы значительно оценены.

Спасибо.

ответ

2

Если кто-нибудь попадается с этим вопросом, мне удалось решить эту проблему путем замены subprocess.call на subprocess.Popen

Прохладная вещь о Popen что вы можете указать среду процесса с аргументом "окр"

Так

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

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

Работал как шарм.