![](/img/trans.png)
[英]Python code in Django not recompiling in daemon mode with Apache/mod_wsgi
[英]python-home option fails when attempting to configure Django/mod_wsgi application in daemon mode on CentOS
我有一個在Apache 2.4和mod_wsgi 4.6.4的Centos 7.5上運行的Django應用程序。 我很難讓mod_wsgi使用想要使用的虛擬環境。 我通過yum安裝了Python 3.6,並用它創建了一個虛擬環境。 我從源代碼編譯了mod_wsgi,使用with-python選項將其指向正確的Python二進制文件。 我期望可以(但不起作用)的(大約)Apache配置如下:
# Required because of some third-party packages that use the
# simplified GIL state API
WSGIApplicationGroup %{GLOBAL}
<VirtualHost *:80>
WSGIDaemonProcess myapp python-home=/path/to/venv python-path=/path/to/my/app
WSGIProcessGroup myapp
WSGIScriptAlias / /path/to/my/app/wsgi.py
</VirtualHost>
<VirtualHost *:443>
WSGIProcessGroup myapp
WSGIScriptAlias / /path/to/my/app/wsgi.py
</VirtualHost>
此配置找不到在虛擬環境中安裝的任何軟件包。 轉儲sys.path會顯示該路徑未按預期包含/path/to/venv/lib/python3.6/site-packages,而是/lib/python3.6/site-packages(即系統目錄)。 我能夠運行我的應用程序的唯一方法是將WSGIDaemonProcess
指令更改為:
WSGIDaemonProcess myapp python-path=/path/to/my/app:/path/to/venv/lib/python3.6/site-packages
第一個配置(建議使用python-home
)在具有Python 3.6和mod_wsgi 4.5.24的macOS 10.12上確實適合我。 兩種環境之間的最大區別是在CentOS服務器上啟用了SELinux,但audit2allow
卻沒有顯示任何解釋我問題的事實。
我明白了。 我仍然不確定為什么我不能第一次弄清楚這一點,但是懷疑這是SELinux的問題。 問題在於,虛擬環境目錄下的所有內容都需要具有httpd_sys_content_t
上下文,但動態加載的二進制庫除外,后者需要httpd_sys_script_exec_t
。 一旦完成此操作, WSGIDaemonProcess
的python-home
參數即可按預期工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.