我一直在努力研究如何在生产中设置Django应用程序,以便在部署时做好准备。我正在使用Django v1.11,我的EC2正在运行Ubuntu 14.04。我一直试图引用this guide作为参考,但它不是Ubuntu特有的,所以我在这方面遇到了一些困难。我已经提到了其他一些资源,但其中很多内容似乎已经过时了。
我在本地计算机上设置了主机规则,将www.example.com
指向我的EC2实例的公共IP地址。
我有一个生活在/home/django/example.com/ENV
的virtualenv设置。我的Django项目直接在/home/django/example.com
。项目名称为mysite
,使用django-admin startproject mysite
生成,因此它在wsgi.py
目录中具有默认的/home/django/example.com/mysite
文件。 wsgi.py
的内容如下:
"""
WSGI config for mysite project.
It exposes the WSGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/1.11/howto/deployment/wsgi/
"""
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
application = get_wsgi_application()
我尝试添加VirtualHost规则,例如:
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
WSGIScriptAlias / /home/django/example.com/mysite/wsgi.py
<Directory "/home/django/example.com/mysite">
<Files wsgi.py>
Require all granted
</Files>
</Directory>
</VirtualHost>
同样,我尝试添加:
Include /etc/apache2/httpd.conf
到/etc/apache/apache2.conf
然后扔掉以下内容:
WSGIScriptAlias / /home/django/example.com/mysite/wsgi.py
WSGIPythonHome /home/django/example.com/ENV
WSGIPythonPath /home/django/example.com
<Directory /home/django/example.com/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
进入httpd.conf
。
在任何一种情况下,我之后都直接重新启动了Apache服务器。
我没有得到任何进一步的打击&#34; 500内部服务器错误&#34;或者点击&#34; ERR_EMPTY_RESPONSE&#34;。
任何能够解决a)我出错的地方,b)我可以参考最新指示,或c)我如何排除故障的人?
答案 0 :(得分:0)
经过大量的故障排除,并咨询格雷厄姆评论中提到的资源,我的VirtualHost需要我所建立的资源:
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
Alias /static /home/django/example.com/static
<Directory /home/django/example.com/static>
Require all granted
</Directory>
WSGIDaemonProcess mysite python-path=/home/django/example.com:/home/django/ENV/lib/python3.4/site-packages
WSGIProcessGroup mysite
WSGIApplicationGroup %{GLOBAL}
WSGIScriptAlias / /home/django/example.com/mysite/wsgi.py
<Directory /home/django/example.com/mysite>
Require all granted
</Directory>
</VirtualHost>
以下是我确定的wsgi.py
的内容:
"""
WSGI config for mysite project.
It exposes the WSGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/1.11/howto/deployment/wsgi/
"""
import os, sys
from django.core.wsgi import get_wsgi_application
path = '/home/django/example.com'
if path not in sys.path:
sys.path.append(path)
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
值得注意的是(仅仅因为它对我来说并不是很明显),有必要指明:
STATIC_ROOT = '/home/django/example.com/static'
<{1>}中的,并运行settings.py
将所有应用程序中的静态文件收集到所述python manage.py collectstatic
中。
我希望将来可以帮助其他人!