【问题标题】:Move Django 1.11 project to wsgi将 Django 1.11 项目移动到 wsgi
【发布时间】:2017-10-05 15:32:28
【问题描述】:

请帮忙,我可以找到错误。 我正在使用 django 1.11 和 apache(在 centos 上)

这是我的 wsgi.py

import os
import sys    
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings")
activate_this = os.path.expanduser("/var/project/project_python35_venv/bin/activate_this.py")
execfile(activate_this, dict(__file__=activate_this))
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

我的 django.conf (httpd)

WSGILazyInitialization On
WSGIRestrictEmbedded On
WSGIPassAuthorization On

WSGIDaemonProcess project user=apache group=apache processes=10 threads=10 maximum-requests=10000 python-path=/var/project/project_python35_venv/lib/python3.5/site-packages python-home=/var/project/project_python35_venv/lib/python3.5
#WSGIProcessGroup project
#WSGIApplicationGroup %{GLOBAL}
#WSGIPythonHome /var/project/project_python35_venv/lib/python3.5

<VirtualHost *:80>

<Directory /var/project/project_python35_venv>
    Require all granted
</Directory>

CustomLog /var/log/httpd/project-access.log common
ErrorLog /var/log/httpd/project-error.log

DocumentRoot /var/project/project/project/

WSGIScriptAlias / /var/project/project/project/wsgi.py

Alias /static /var/project/project/project/static/

<Directory /var/project/project/project/static>
    Require all granted
</Directory>

<Directory /var/project/project>
    <Files wsgi.py>
        Require all granted
    </Files>
</Directory>

</VirtualHost>

我正在尝试所有情况,但我的 httpd 日志中仍然出现此错误:

ImportError: 没有名为站点的模块

谢谢大家的帮助

【问题讨论】:

  • 你是从源代码自己编译 mod_wsgi 的吗?如果你编译了 mod_wsgi,你是如何编译的?您尝试使用的 Python 安装在哪里?

标签: python django apache mod-wsgi django-wsgi


【解决方案1】:

试试这个

wsgi

import os
import sys

PROJECT_DIR = '/var/project'
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings")
def execfile(filename):
     globals = dict( __file__ = filename )
     exec( open(filename).read(), globals )

activate_this = os.path.join( PROJECT_DIR, 'project_python35_venv/bin', 'activate_this.py' )
execfile( activate_this )

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

和 apache.conf

WSGILazyInitialization On
WSGIRestrictEmbedded On
WSGIPassAuthorization On

WSGIDaemonProcess project python-path=/var/project/project/:/var/project_python35_venv/lib/python3.5/site-packages/
WSGIProcessGroup project

<VirtualHost *:80>

<Directory /var/project/project_python35_venv>
    Require all granted
</Directory>

CustomLog /var/log/httpd/project-access.log common
ErrorLog /var/log/httpd/project-error.log

DocumentRoot /var/project/project/

WSGIScriptAlias / /var/project/project/wsgi.py

Alias /var/project/project/static /var/project/project/static/

<Directory /var/project/project/static>
    Require all granted
</Directory>

<Directory /var/project>
    <Files wsgi.py>
        Require all granted
    </Files>
</Directory>

</VirtualHost>

【讨论】:

  • 请参阅modwsgi.readthedocs.io/en/develop/user-guides/…,了解将 Python 虚拟环境与 mod_wsgi 一起使用的推荐方式。您应该避免将python-pathsite-packages 一起使用,而应将python-home 与虚拟环境的根目录一起使用。在 Apache 配置中完成后,WSGI 脚本文件中不需要 activate_this
  • 另外,将DocumentRoot 设置为源代码不合适的目录。搞砸配置,这可能意味着您的源代码是可下载的。
猜你喜欢
  • 1970-01-01
  • 2018-04-13
  • 2018-01-09
  • 2018-05-18
  • 2017-06-25
  • 2012-08-21
  • 2023-03-07
  • 2021-09-18
  • 2018-09-14
相关资源
最近更新 更多