![](/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.