我是django的新手,我必须在ubuntu 16.04中将项目部署到生产模式。我已经用apache2安装了wsgi,并包含了django项目和python site-packages的系统路径。
我的网站启用/ 000-default.config是
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName myproject.com
ServerAlias www.myproject.com
Alias /static /var/www/html/TEST/myproject/static
<Directory /var/www/html/TEST/myproject/static>
Require all granted
</Directory>
<Directory /var/www/html/TEST/myproject/myproject>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIDaemonProcess myproject python-home=/var/www/html/TEST/newenv python-path=/var/www/html/TEST/myproject:/var/www/html/TEST/newenv/lib/python3.5/site-packages
WSGIProcessGroup myproject
WSGIScriptAlias / /var/www/html/TEST/myproject/myproject/wsgi.py
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
和我的wsgi文件
import os , sys
sys.path.append('/var/www/html/TEST/myproject/')
sys.path.append('/var/www/html/TEST/newenv/lib/python3.5/dist-packages/')
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
当我运行链接时,我收到内部服务器错误(505)
我已经检查了错误日志中的错误,它显示了我
django.core.wsgi导入get_wsgi_application [wsgi:error] ImportError:没有名为django.core.wsgi的模块
有人可以帮我这个吗?我用Google搜索并检查了所有其他选项和解决方案。提前致谢
答案 0 :(得分:0)
而不是:
WSGIDaemonProcess myproject python-home=/var/www/html/TEST/newenv \
python-path=/var/www/html/TEST/myproject:/var/www/html/TEST/newenv/lib/python3.5/site-packages
WSGIProcessGroup myproject
WSGIScriptAlias / /var/www/html/TEST/myproject/myproject/wsgi.py
你需要的只是:
WSGIDaemonProcess myproject python-home=/var/www/html/TEST/newenv \
python-path=/var/www/html/TEST/myproject
WSGIProcessGroup myproject
WSGIScriptAlias / /var/www/html/TEST/myproject/myproject/wsgi.py
您不需要添加site-packages
目录。
在您不需要的wsgi.py
文件中:
sys.path.append('/var/www/html/TEST/myproject/')
sys.path.append('/var/www/html/TEST/newenv/lib/python3.5/dist-packages/')
python-home
和python-path
WSGIDaemonProcess
的结果相同。
另一个问题是您已将Django项目代码放在目录/var/www/html
下。你不应该把它放在那里。这是默认的DocumentRoot
目录。如果您要取消注释WSGIScriptAlias
,有人可以下载您的源代码。因此最好不要将代码放在该目录下。
现在,就解决问题而言,这些事情都不应该有所作为,因为第一个只是获得冗余设置。第二个是改变更好的做法。
此时,唯一的原因可以看出为什么找不到Django模块的原因是目录/文件的权限是否使得Apache运行代码的用户无法读取它们。因此,请检查/var/www/html/TEST/newenv
上的权限。