【问题标题】:Apache Wsgi virtualHost, Django virtual env "no module named django.core.wsgi"Apache Wsgi virtualHost,Django 虚拟环境“没有名为 django.core.wsgi 的模块”
【发布时间】:2016-10-27 06:38:27
【问题描述】:

我已经看到很多与我的问题相关的先前消息,但没有答案可以摆脱我的“500 服务器内部错误”,所以我尝试发布我的 conf 以获得帮助。

错误信息:

[Fri Jun 24 17:05:23.631270 2016] [authz_core:error] [pid 15187:tid 140715758237440] [client 127.0.0.1:47873] AH01630:客户端被服务器配置拒绝:/home/www/waves/

[Fri Jun 24 17:05:23.631568 2016] [:error] [pid 15186:tid 140715648984832] ['/home/marc/.virtualenvs/waves/lib/python2.7/site-packages', '/主页/www/waves'、'/usr/local/lib/python2.7/dist-packages/setuptools-20.6.7-py2.7.egg'、'/usr/lib/python2.7'、'/usr /lib/python2.7/plat-x86_64-linux-gnu','/usr/lib/python2.7/lib-tk','/usr/lib/python2.7/lib-old','/usr/ lib/python2.7/lib-dynload'、'/usr/local/lib/python2.7/dist-packages'、'/usr/lib/python2.7/dist-packages'、'/usr/lib/python2 .7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/python2.7/dist-packages/ubuntu-sso-client']

[Fri Jun 24 17:05:23.631660 2016] [:error] [pid 15186:tid 140715648984832] [remote 127.0.0.1:50665] mod_wsgi (pid=15186): Target WSGI script '/home/www/waves /waves_services/wsgi.py' 不能作为 Python 模块加载。

[Fri Jun 24 17:05:23.631675 2016] [:error] [pid 15186:tid 140715648984832] [remote 127.0.0.1:50665] mod_wsgi (pid=15186): 处理 WSGI 脚本 '/home/www /waves/waves_services/wsgi.py'。

[Fri Jun 24 17:05:23.631686 2016] [:error] [pid 15186:tid 140715648984832] [remote 127.0.0.1:50665] Traceback(最近一次通话最后):

[Fri Jun 24 17:05:23.631710 2016] [:error] [pid 15186:tid 140715648984832] [remote 127.0.0.1:50665] 文件“/home/www/waves/waves_services/wsgi.py”,行18、在

[Fri Jun 24 17:05:23.631731 2016] [:error] [pid 15186:tid 140715648984832] [remote 127.0.0.1:50665] from django.core.wsgi import get_wsgi_application

[Fri Jun 24 17:05:23.631743 2016] [:error] [pid 15186:tid 140715648984832] [remote 127.0.0.1:50665] ImportError: No module named django.core.wsgi

我的 django 应用程序无法在 apache wsgi 模式下加载,我尝试了很多解决方案但仍然无法正常工作。这是我的 confs 文件: 虚拟主机:

<VirtualHost *:80>

ServerName dev.www.waves.com
ServerAlias www.waves.com
ServerAdmin webmaster@waves.com

DocumentRoot /home/www/waves
Alias media/ /home/www/waves/media/
Alias static/ /home/www/waves/static/

<Directory /home/www/waves>
   Require all granted
</Directory>

<Directory /home/www/waves/staticfiles>
   Require all granted
</Directory>

<Directory /home/www/waves/media>
   Require all granted
</Directory>

WSGIDaemonProcess waves python-path=/home/marc/.virtualenvs/waves/lib/python2.7/site-packages:/home/www/waves
WSGIProcessGroup waves
WSGIScriptAlias /waves /home/www/waves/waves_services/wsgi.py

<Directory /home/www/waves/waves_services>
  <Files wsgi.py>
    Require all granted
  </Files>
</Directory>

<Directory /home/marc/.virtualenvs/waves/lib/python2.7/>
Require all granted
</Directory>

我的 wsgy.py 内容:

from __future__ import unicode_literals
import os
import sys
import site

print sys.path
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "waves_services.settings.production")
application = get_wsgi_application()

我追踪到 apache 错误日志中的 sys.path 内容,以及 sys.path 中的 virtualenv。 Django 安装在这个 virtualenv 中(我首先尝试“全局”安装 django,但错误只是移动到第一个“应用程序特定”导入:环境包含在我的设置文件中。 虚拟环境是使用 virtualenvwrapper 创建的(有影响吗?)

我也尝试更改 virtualenv 文件的所有权,也更改了“执行”标志,但我仍然得到这个...... 500 服务器错误。

我会很感激知道发生了什么! 谢谢

【问题讨论】:

  • 您好,是的,django 安装在 virtualenv 中。更准确地说,这里是我的站点包 ll 结果的示例:django mptt Django-1.9.6.dist-info django_cors_headers-1.1.0-py2.7.egg-info django_countries django_countries-3.4.1.dist-info django_crontab django_debug_toolbar-1.4.dist-info django-eav.egg-link ...
  • apache 可以访问 virtualenv 吗?这通常是个问题
  • 您好,您的意思是在虚拟主机中配置还是文件权限?虚拟环境目录的权限设置如下:目录为 775,文件为 644,全部标记在 www-data 组中,但归我所有(即 marc)
  • 不,意思是apache用户可以访问virtualenv文件夹
  • 好的,如果它只与'apache'用户(www-data)有关,我将我的virtualenv目录组更改为www-data,我的错误没有改变。仍然找不到 django 核心模块。我什至尝试将所有权更改为 www-data,(在这种情况下,我认为我将无法从“marc”用户在此虚拟环境中进行更多 pip 安装?)仍然出现相同的错误。

标签: django apache virtualenv wsgi virtualenvwrapper


【解决方案1】:

需要检查的几件事。

  1. 确保 virtualenv 有 django (pip freeze | grep django)
  2. 通过检查文件夹权限检查apache用户是否可以访问virtualenv
  3. 如果您使用的是 apache 2.4 + 更改以下内容

    Order deny,allow Allow from all

    Require all granted

@marcoooo (OP) 建议的编辑:不要将 virtualenv 基本目录放在任何没有“x”标志的主目录下,apache www-data 用户将无法也激活 virtualenv.... 非常感谢 e4c5 的帮助,并挽救了我的白天(和夜晚)

【讨论】:

  • 1.检查:点冻结| grep Django(注意 'D' 代替 'd'): Django==1.9.6 2. 访问权限正常:我拥有的目录,www-data 组,目录上的 755,文件上的 644(我应该添加对文件执行?) 3. Web 可访问目录的配置正常。 ...不幸的是,我仍然收到相同的错误消息。
  • 但是根据您的帖子,您的配置中有很多Allow from all
  • 我用最终的 apache 配置数据编辑了我的帖子,对不起。
  • 那么我确信您的 apache 用户无权访问 virtualenv。如果您的 apache 用户启用了 shell,请尝试更改为该用户并激活 virtualenv
  • 你是对的......我很困惑,实际上问题基本上是因为我的'home'目录(/home/marc)没有'x'标志,所以www -data 无法通过第一个目录....
猜你喜欢
  • 2013-02-02
  • 2021-11-24
  • 2020-08-17
  • 2020-04-01
  • 1970-01-01
  • 2018-07-28
  • 2019-03-03
  • 2017-09-11
  • 1970-01-01
相关资源
最近更新 更多