我已经按照这个指南设置了一个Django服务器:
https://gist.github.com/evildmp/3094281
uwsgi 已经正确提供服务,但是静态文件显然缺失,因为这是 nginx 的职责。所以问题似乎出在 nginx 上。我的 nginx 配置与该指南中的相同。但是这是我的 base.py 设置文件:########## PATH CONFIGURATION
# Absolute filesystem path to the Django project directory:
DJANGO_ROOT = dirname(dirname(abspath(__file__)))
# Absolute filesystem path to the top-level project folder:
SITE_ROOT = dirname(DJANGO_ROOT)
BASE_DIR = dirname(dirname(abspath(__file__)))
# Site name:
SITE_NAME = "sasite"
# Add our project to our pythonpath, this way we don't need to type our project
# name in our dotted import paths:
path.append(DJANGO_ROOT)
########## END PATH CONFIGURATION
########## MEDIA CONFIGURATION
# See: https://docs.djangoproject.com/en/dev/ref/settings/#media-root
MEDIA_ROOT = normpath(join(SITE_ROOT, 'media'))
# See: https://docs.djangoproject.com/en/dev/ref/settings/#media-url
MEDIA_URL = '/media/'
########## END MEDIA CONFIGURATION
########## UPLOAD CONFIGURATION
UPLOAD_ROOT = join(BASE_DIR, 'uploads')
UPLOADS_URL = '/uploads/'
FILE_UPLOAD_HANDLERS = (
"django.core.files.uploadhandler.MemoryFileUploadHandler",
"django.core.files.uploadhandler.TemporaryFileUploadHandler",
)
########## END UPLOAD CONFIGURATION
########## STATIC FILE CONFIGURATION
# See: https://docs.djangoproject.com/en/dev/ref/settings/#static-root
STATIC_ROOT = normpath(join(SITE_ROOT, 'assets'))
STATICFILE_ROOT = normpath(join(SITE_ROOT, 'static'))
# See: https://docs.djangoproject.com/en/dev/ref/settings/#static-url
STATIC_URL = '/static/'
# See: https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#std:setting-STATICFILES_DIRS
STATICFILES_DIRS = (
normpath(join(SITE_ROOT, 'static')),
)
正如我之前所说,我的配置与我提供的指南中的配置相同,目录的路径是正确的,但我还有一个名为assets的目录,其中包含一些支持某些JavaScript插件等的静态文件,因为我使用了一个主题。我猜在我的nginx.conf中为assets添加另一个条目会有所帮助,但尽管如此,我还是在/media/目录下添加了一个名为1.txt的文件。当我访问domainname.com:8001(uwsgi正在提供服务)时,页面上没有css,没有javascript等。当我尝试访问domainname.com:8000/media/1.txt(由nginx提供服务)时,我得到了错误,例如空响应或者根本无法工作。
既然uWSGI显然在提供网站服务,而没有提供任何静态文件,那么我如何修复nginx,使其正确地提供静态文件,以便当我访问domainname.com:8000时,它将显示完整的网站,包括所有静态文件,因为uWSGI只是在nginx反向代理的后面。
我需要一些帮助,在这方面我知道它是如何工作的,但我似乎无法使它正常工作。
感谢您能提供的任何帮助。
编辑:
nginx.conf
# nginx.conf
upstream django {
# connect to this socket
# server unix:///tmp/uwsgi.sock; # for a file socket
server 127.0.0.1:8001; # for a web port socket
}
server {
# the port your site will be served on
listen 8000;
# the domain name it will serve for
server_name .cshenkan.com; # substitute your machine's IP address or FQDN
charset utf-8;
#Max upload size
client_max_body_size 75M; # adjust to taste
# Django media
location /media {
alias /home/ubuntu/sasite-rewrite/media; # your Django pro$
}
location /static {
alias /home/ubuntu/sasite-rewrite/static; # your Django pro$
}
# Finally, send all non-media requests to the Django server.
location / {
uwsgi_pass django;
include /etc/nginx/uwsgi_params; # or the uwsgi_params you installe$
}
}
我使用的运行uwsgi的命令:
uwsgi --http :8001 --chdir /home/ubuntu/sasite-rewrite --wsgi-file /home/ubuntu/sasite-rewrite/sasite/wsgi.py
wsgi.py文件内容如下:
from os.path import abspath, dirname
from sys import path
from django.core.wsgi import get_wsgi_application
SITE_ROOT = dirname(dirname(abspath(__file__)))
path.append(SITE_ROOT)
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "sasite.settings.production")
application = get_wsgi_application()
我已经尝试使用Unix套接字,更改nginx配置以使用Unix套接字而不是Web套接字,并通过更改我的uwsgi命令来实现: uwsgi --socket /tmp/uwsgi.sock --chdir /home/ubuntu/sasite-rewrite --wsgi-file /home/ubuntu/sasite-rewrite/sasite/wsgi.py
但是当我这样做时,在导航到domainname.com:8000时根本不起作用,由于我不再使用端口8001的Web套接字,因此无法通过转到domainname.com:8001来单独测试uwsgi。再次看起来nginx没有工作,我不知道如何使用Unix套接字单独测试uwsgi。
有什么想法我做错了什么吗?我遵循了几个指南,并尝试了几种方法,但似乎都不起作用,我最接近的是我在顶部链接的gist。但是当我尝试更改为Unix套接字(如我所说)时,似乎根本不起作用。
编辑2:
所以现在我的新base.py设置文件看起来像这样:
STATIC_ROOT = normpath(join(SITE_ROOT, 'static'))
STATIC_URL = '/static/'
STATICFILES_DIRS = (
normpath(join(SITE_ROOT, 'static')),
normpath(join(SITE_ROOT, 'assets')),
)
这个配置能与我目前的设置一起使用吗?我的典型django静态目录是static/,但assets/用于我正在使用的主题,我也需要从那里提供静态文件。如果我将它添加到STATICFILES_DIRS中,这样做就可以了吗?我需要在nginx.conf中添加任何内容吗?例如,在nginx.conf中为assets创建与我设置静态文件相同的东西?
location /assets {
alias /home/ubuntu/sasite-rewrite/assets
}
这是正确的方法吗?不幸的是,我无法让nginx为静态文件正常工作,因此无法测试它。只是好奇我是否以正确的方式进行。
collectstatic
命令吗? - Ramon Moraes