2012-12-07 50 views
3

我需要在Django應用程序啓動時運行我的代碼,然後Django纔開始監聽傳入連接。在第一個HTTP請求上運行我的代碼並不夠好。當我使用Gunicorn時,我的代碼必須在父進程中運行,然後分叉。用Django和Gunicorn在父項中運行啓動代碼

https://stackoverflow.com/a/2781488/97248在Django 1.4.2中似乎不起作用:在接收到第一個請求之前,它不運行中間件的方法__init__方法。同上添加代碼到urls.py

快速谷歌搜索沒有透露任何有用的東西。

+1

Django站點中是否存在需要運行的東西,或者是否正在分離守護進程或其他東西? –

+1

分叉守護進程是危險的 - 你可以用這種方式製作nephilim:/ – orokusaki

+0

我想在站點可以上線之前進行一些快速檢查。我不會產生任何守護進程。 – pts

回答

1

我剛剛遇到這個問題我自己,而解決辦法是基本鏈保證執行和正確的順序命令:

腳本由systemd,supervisord或任何其他這樣的系統啓動:

#!/bin/sh 
python manage.py my_custom_command && gunicorn project.wsgi [email protected] 

創建您自己的自定義django命令並關閉您。如果您在命令(requires_system_checks and requires_migrations_checks set to False)中禁用健全性檢查,則可以獲得一些加速。

爲了使事物更通用,您可以創建一個「啓動」信號,將任意函數連接到該信號,並只從該自定義命令發出信號。

+0

感謝您提及此解決方法。但是,我不能接受它作爲答案,因爲'python manage.py'環境可能與'gunicorn project.wsgi'環境有很大不同,我想在後者中運行我的檢查。 – pts

相關問題