我正在尝试在亚马逊的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)
答案 0 :(得分:34)
我知道这是一个旧帖子,但我刚刚遇到同样的问题,我不认为这是由于缺少包裹造成的。由于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
# ===================
确保:
您将mod_wsgi添加到Apache模块目录 必须为您拥有的操作系统,Apache和Python版本编译mod_wsgi
将load module命令添加到httpd.conf中以加载mod_wsgi模块 LoadModule wsgi_module modules / mod_wsgi.so
在httpd.conf中配置了Django细节,或者在httpd.conf中包含任何内容
基于文档How to use Django with Apache and 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>
希望这会有所帮助。它对我有用。
答案 1 :(得分:7)
将其添加到Apache配置文件中:
WSGIPythonHome /home/ec2-user/.virtualenvs/mysite-main
答案 2 :(得分:4)
对我来说,这表明Django没有安装在服务器上。通过
修复pip install Django
答案 3 :(得分:2)
我刚才有类似的错误。事实证明我们的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
希望这对任何看到类似错误消息的人都有帮助!
答案 4 :(得分:1)
您已经很好地配置了我的朋友,只需要授予apache用户访问项目和virtualenv dirs的权限。
示例:
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
(项目文件夹)的问题
答案 5 :(得分:1)
我有同样的问题。我的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项目,上述命令将有效地将其关闭。
答案 6 :(得分:0)
import os import django from django.core.handlers.wsgi import WSGIHandler os.environ.setdefault("DJANGO_SETTINGS_MODULE", "eisentask.settings.production") django.setup(set_prefix=False) application = WSGIHandler()
答案 7 :(得分:0)
我正在为项目使用Centos,nginx和gunicorn ... 我有这个问题 wsgi文件无法访问,可能是您当前目录的bcz 我更改了当前目录,它正常工作了... 我的项目名称是coda,所以我输入了
cd coda
然后
gunicorn --bind 0.0.0.0:8001 coda.wsgi
答案 8 :(得分:0)
万一有人使用AWS Lightsail bitnami来到这里。
问题是“ python将软件包安装在apache无法看到的目录中”。
so:软件包安装在“ /home/bitnami/.local/lib/python3.8/site-packages/”中,而Apache查找在“ /opt/bitnami/python/lib/python3.8/site-packages”中/'。
我遵循的临时解决方案是使用以下命令'cp -r /home/bitnami/.local/lib/python3.8/site-packages/* / opt / bitnami / python / lib /将软件包复制到Apache eyes文件夹python3.8 / site-packages /'
答案 9 :(得分:0)
嗨,我在 Ubuntu 20.04 服务器中遇到了同样的问题。我通过安装 apache2-dev
sudo apt-get install apache2-dev
在 mod_wsgi documentation 中安装 apache2
和 apache2-dev
很重要。
答案 10 :(得分:-1)
对我来说,需要设置一些变量(对于Windows):
set PYTHONHOME=F:\path\to\python
set PYTHONPATH=F:\path\to\python
答案 11 :(得分:-1)
确保您使用virtualenv中安装的uwsgi模块,例如:
/home/ubuntu/venv/bin/uwsgi --ht :8000 --module mysite.wsgi