python - 单个 apache 上的多个 wsgi.mod
问题描述
我django3
在 apache 上有一个应用程序http://myapp.example.com
现在它可以工作,但我想将第二个django3
应用程序与Anaconda
.
可能吗?如果是这样,我应该如何为每个应用程序设置WSGIPythonPath
和?Alias /static/
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
ServerName myapp.example.com
DocumentRoot "/var/www/html/myapp/current/"
ErrorLog ${APACHE_LOG_DIR}/myapp_error.log
CustomLog ${APACHE_LOG_DIR}/myapp_access.log combined
<Directory /var/www/html/myapp/current/>
Order allow,deny
Allow from all
</Directory>
WSGIScriptAlias / /var/www/html/myapp/current/myapp/wsgi.py
WSGIDaemonProcess py37 user=ubuntu group=ubuntu python-path=/home/ubuntu/anaconda3/envs/py37/lib/python3.7/site-packages
</VirtualHost>
LoadModule wsgi_module /home/ubuntu/anaconda3/envs/py37/lib/python3.7/site-packages/mod_wsgi/server/mod_wsgi-py37.cpython-37m-x86_64-linux-gnu.so
WSGIPythonHome /home/ubuntu/anaconda3/envs/py37/
WSGIPythonPath /var/www/html/myapp/current/
<Directory /var/www/html/myapp/current>
<Files wsgi.py>
Order allow,deny
Allow from all
</Files>
</Directory>
Alias /static/ /var/www/html/myapp/current/static/
Alias /media/ /var/www/html/myapp/current/media/
<Directory /var/www/html/myapp/current/static>
Order allow,deny
Allow from all
</Directory>
解决方案
只需克隆虚拟主机并替换与新应用程序相关的路径,您可能需要移动目录别名:
Alias /static/ /var/www/html/myapp/current/static/
Alias /media/ /var/www/html/myapp/current/media/
<Directory /var/www/html/myapp/current/static>
Order allow,deny
Allow from all
</Directory>
进入虚拟主机。我不使用 wsgi.py 而是使用 site.wsgi。哪个运行应用程序。它的内容是:
import os
import sys
import site
# Add the site-packages of the chosen virtualenv to work with
site.addsitedir('{{PATH TO}/site-packages')
# Add the app's directory to the PYTHONPATH
sys.path.append('{PATH TO PROJECT}')
os.environ['DJANGO_SETTINGS_MODULE'] = '{PROJECT}.settings'
# Activate your virtual env
activate_env=os.path.expanduser("{PATH TO}/bin/activate_venv.py")
exec(open(activate_env).read(), dict(__file__=activate_env))
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
在我的舞台上有效的是(httpd.conf):
LoadModule wsgi_module {PATH TO}/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so
WSGISocketPrefix /var/run/wsgi
并且 pyhton 路径/脚本是在虚拟主机中设置的,而不是在主文件中:
WSGIDaemonProcess {GROUP} threads=1 python-home={PATH TO} python-path={PATH TO APP} user={USER}
WSGIProcessGroup {GROUP}
WSGIScriptAlias / {PATH TO FILE}/site.wsgi
如果您想使用上面的设置,您可能需要在 wsgi.py 中注释启动应用程序的行
推荐阅读
- spring - OAuth2 资源服务器在与授权服务器通信时应该使用 Basic 还是 Bearer token auth?
- android - 如何在Android应用程序中将数据从一个活动传递到另一个活动
- windows - Powershell 等效于简单的 Perl 正则表达式搜索替换一行以在 UCS-2LE 或 UTF-16 Little Endian 文件中查找替换
- testing - 我正在尝试编写一个测试,以确保文本文件中有内容,但它一直失败,我不确定问题是什么?
- c# - 如何从与虚拟目录不在同一台服务器上运行的 WCF 服务访问虚拟目录?
- javascript - 任何人都可以分解此架构代码吗?
- c# - 将片段添加到以编程方式生成的 FrameLayout
- r - 如何测试函数是否返回消息
- java - 如何使用 liquibase 将您的数据库回滚到 Spring Boot 中的特定变更集 ID?
- java - 循环中的打印语句重复多次