2013-11-26 55 views
1

我正在研究一個有兩個django項目的系統。服務器和客戶端。服務器負責管理多個客戶端實例。這個系統依賴Sentry/Raven來處理錯誤記錄。在我的Django項目中訪問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上運行腳本,它完美的工作。

然而,當我使用子稱它爲我的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 

你可能已經注意到哨兵是安裝在virtualenv裏面的,但是當我在我的bash上調用這個腳本時,我不需要它激活,只要我提供了virtualenv的python的正確路徑。我迷失在這裏。當我使用shell運行良好時,我發現腳本無法使用subprocess.call失敗。

任何指針都會大大降低。

謝謝。

回答

2

如果有誰有這個問題在整個來了,我設法通過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) 

工作就像一個魅力。