我正试图在亚马逊的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
// Apacheconfiguration文件
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)
我知道这是一个古老的线程,但我碰到了同样的问题,我不认为这是由一个丢失的包引起的。 由于Django核心发行版已经包含了正确的wsgi处理程序。
这里的问题是,当执行wsgi.py时,它会从你的virtualenv中丢失站点包的包。 (如果你已经激活了你的virtualenv,并且完成了pip安装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模块中。dir mod_wsgi必须针对操作系统,Apache和Python版本进行编译
在你的httpd.conf中加入load module命令加载mod_wsgi模块Loadmodulee wsgi_module modules / mod_wsgi.so
在你的httpd.conf中配置了Django特性,或者你在httpd.conf中包含的任何conf
基于文档如何使用Django与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>
希望这可以帮助。 它为我工作。
将其添加到Apache配置文件中:
WSGIPythonHome /home/ec2-user/.virtualenvs/mysite-main
对我来说,这表明了Django没有安装在服务器上。 通过固定
pip install Django
你已经配置好了我的朋友,只需要给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
(项目文件夹)
我刚才也有类似的错误。 事实证明,我们的Django代码是在python 3.5上开发的,但由于某些原因,部署我们的服务器设置virtualEnv与python 2.7的人。 我们用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
希望这将有助于任何人看到类似的错误信息!
对我而言,需要设置一些变量(对于Windows):
set PYTHONHOME=F:\path\to\python set PYTHONPATH=F:\path\to\python
确保您使用的是virtualenv内部安装的uwsgi模块,例如:
/home/ubuntu/venv/bin/uwsgi --ht :8000 --module mysite.wsgi