58

我正在尝试在 Amazon 的 EC2 实例上发布我的网站,但我不断收到 500 错误。我真的不知道为什么。

//日志文件

    [Sun Feb 17 23:12:48.066802 2013] mod_wsgi (pid=2102): Target WSGI script '/srv/www/app/poka/apache/wsgi.py' cannot be loaded as Python module.
    [Sun Feb 17 23:12:48.066840 2013] mod_wsgi (pid=2102): Exception occurred processing WSGI script '/srv/www/app/poka/apache/wsgi.py'.
    [Sun Feb 17 23:12:48.066864 2013] Traceback (most recent call last):
    [Sun Feb 17 23:12:48.066889 2013] File "/srv/www/mysite/poka/apache/wsgi.py", line 26, in <module>
    [Sun Feb 17 23:12:48.066920 2013] from django.core.wsgi import get_wsgi_application
    [Sun Feb 17 23:12:48.066945 2013] ImportError: No module named django.core.wsgi

//Apache 配置文件

    WSGIScriptAlias / /srv/www/app/mysite/apache/wsgi.py

    WSGIDaemonProcess mysite python-path=/srv/www/app/mysite:/home/ec2-user/.virtualenvs/mysite-main/lib/python2.7/site-packages
    WSGIProcessGroup mysite

    <Directory /srv/www/app/mysite/apache/>
    <Files wsgi.py>
    Order deny,allow
    Allow from all
    </Files>
    </Directory>

    <Directory /srv/www/app/mysite/apache/>
    Order deny,allow
    Allow from all
    </Directory>

    <Directory /home/ec2-user/app/mysite/static>
    Order deny,allow
    Allow from all
    </Directory>

    <Directory /home/ec2-user/app/mysite/media>
    Order deny,allow
    Allow from all
    </Directory>

//wsgi.py

    import os
    import sys
    import site

    site.addsitedir('/home/ec2-user/.virtualenvs/mysite-main/lib/python2.7/site-packages')
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")

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

    path = '/srv/www/app/mysite'

    if path not in sys.path:
        sys.path.append(path)
4

11 回答 11

51

我知道这是一个旧线程,但我刚刚遇到了同样的问题,我不认为这是由于缺少包引起的。由于 Django 核心发行版已经包含正确的 wsgi 处理程序。

这里的问题是,当 wsgi.py 被执行时,它会从你的 virtualenv 中丢失站点包的包。(如果你已经激活了你的 virtualenv,并完成了 pip install django 那么一切都很好。你有必要的 django 包)。

就我而言,我修复了在我的 Path/to/Project/Project/wsgi.py 文件中修改 sys.path 的问题。

您必须将项目目录和 virtualenv 站点包附加到 sys.path 列表中。这是我的项目中包含的 wsgi.py 文件(谈论使用 django-admin.py start-project 创建的 wsgi.py)...我必须对其进行修改才能使其与 Apache 一起使用

# =====================
# wsgi.py file begin 

import os, sys
# add the hellodjango project path into the sys.path
sys.path.append('<PATH_TO_MY_DJANGO_PROJECT>/hellodjango')

# add the virtualenv site-packages path to the sys.path
sys.path.append('<PATH_TO_VIRTUALENV>/Lib/site-packages')

# poiting to the project settings
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "hellodjango.settings")

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

# wsgi.py file end
# ===================

确保:

  1. 您将 mod_wsgi 添加到 Apache 模块目录 mod_wsgi 必须针对您拥有的操作系​​统、Apache 和 Python 版本进行编译

  2. 将加载模块命令添加到您的 httpd.conf 以加载 mod_wsgi 模块 LoadModule wsgi_module modules/mod_wsgi.so

  3. 在 httpd.conf 或包含在 httpd.conf 中的任何 conf 中配置 Django 细节

基于文档How to use Django with Apache 和 mod_wsgi

WSGIScriptAlias / <PATH_TO_PROJECT>/hellodjango/hellodjango/wsgi.py
WSGIPythonPath <PATH_TO_PROJECT>:<PATH_TO_VIRTUALENV>/Lib/site-packages

<Directory <PATH_TO_PROJECT>/hellodjango/hellodjango> 
  <Files wsgi.py>
    Order deny,allow
    Require all granted
  </Files>
</Directory>

希望这可以帮助。它对我有用。

于 2014-03-18T11:24:34.647 回答
27

我遇到过同样的问题。我的 libapache2-mod-wsgi 是 python 2.x 而不是 python 3.x

在这里找到了解决方案:https ://stackoverflow.com/a/28118284/2489042

归功于@nima

$ sudo apt-get remove libapache2-mod-python libapache2-mod-wsgi
$ sudo apt-get install libapache2-mod-wsgi-py3

在复制/粘贴这些命令之前来自@alxs 的警告:如果服务器上正在运行使用 wsgi 和 apache 的 python 2 项目,则上述命令将有效地关闭它们。

于 2019-11-14T14:14:07.950 回答
7

将此添加到 Apache 配置文件中:

WSGIPythonHome /home/ec2-user/.virtualenvs/mysite-main
于 2013-02-17T23:41:38.323 回答
4

我刚才有一个类似的错误。事实证明,我们的 Django 代码是在 python 3.5 上开发的,但由于某些原因,部署我们服务器的人使用 python 2.7 设置了 virtualEnv。我们重新部署了 python 3.5,一切都为我们工作

以下是我收到的错误消息:

$ python serviceStartup.py 
Traceback (most recent call last):
  File "serviceStartup.py", line 10, in <module>
    from django.core.wsgi import get_wsgi_application
ImportError: No module named django.core.wsgi

希望这对任何看到类似错误消息的人有所帮助!

于 2017-10-10T21:56:05.030 回答
3

对我来说,这表明服务器上没有安装 Django。通过固定

pip install Django
于 2014-11-18T20:05:58.997 回答
1

我的朋友,你已经很好地配置了一切,只需要授予 apache 用户访问项目和 virtualenv 目录的权限。

例子:

sudo chown -R www-data:www-data /home/ubuntu/projects
sudo chown -R www-data:www-data /home/ubuntu/virtualenv

这解决了我的ImportError: No module named django.core.wsgi(virtualenvs 文件夹)和ImportError: No module named <project-name>.settings(项目文件夹)的问题

于 2015-11-26T02:01:39.227 回答
0

乍一看,我很抱歉我的英语。我也遇到了这个问题,我已经通过将“wsgi.py”文件更改为:

导入操作系统
导入 django
从 django.core.handlers.wsgi 导入 WSGIHandler


os.environ.setdefault("DJANGO_SETTINGS_MODULE", "eisentask.settings.production")
django.setup(set_prefix=False)

应用程序 = WSGIHandler()
于 2018-01-11T18:39:58.580 回答
0

万一有人使用 AWS Lightsail bitnami 来到这里。

问题是'python 将包安装在 apache 看不到的目录中'。

所以:软件包安装在“/home/bitnami/.local/lib/python3.8/site-packages/”中,Apache 在“/opt/bitnami/python/lib/python3.8/site-packages/”中查找。

我遵循的临时解决方案是使用此命令将包复制到 Apache 眼睛文件夹 'cp -r /home/bitnami/.local/lib/python3.8/site-packages/* /opt/bitnami/python/lib/python3.8 /站点包/'

于 2020-11-24T11:11:36.820 回答
0

嗨,我在 Ubuntu 20.04 服务器中遇到了同样的问题。我通过安装修复了它apache2-dev

sudo apt-get install apache2-dev

mod_wsgi 文档中,拥有apache2apache2-dev安装两者很重要。

于 2021-01-09T07:12:41.133 回答
0

我正在为我的项目使用 Centos 以及 nginx 和 gunicorn...我遇到了这个问题...无法访问 wsgi 文件可能是您当前目录的 bcz 我更改了当前目录并且它有效...我的项目名称是尾声,所以我输入了

cd coda

接着

gunicorn --bind  0.0.0.0:8001 coda.wsgi
于 2020-06-15T05:20:30.497 回答
-2

对我来说,需要设置一些变量(对于 Windows):

set PYTHONHOME=F:\path\to\python
set PYTHONPATH=F:\path\to\python
于 2017-05-26T10:12:40.477 回答