仅使用gunicorn、django 和whitenoise 如何为媒体提供服务?

5 django nginx django-media gunicorn

我的网站终于可以正常工作了,但媒体文件未提供服务,debug = False我该怎么办?我按照本教程尝试让它与 nginx 一起工作,但它不断损坏并且不提供静态服务等,所以我选择了纯gunicorn和whitenoise。我真的不是部署专家,只是开发专家。请帮忙。媒体文件的安全性不是问题,因为只有管理员才能上传它们,而最终用户则不能。具体来说,我需要知道是否是世界末日debug = True只留下媒体文件。或者是否有一种简单的方法可以为他们提供服务debug = False

Das*_*rum -1

以下是我如何设置 Whitenoise 来为我的应用程序提供静态文件。我使用的是 RedHat 7,但 Ubuntu 中的情况应该类似。我的 Django 版本是 1.11。

请注意,在开发环境之外使用 DEBUG=True 运行是不安全的。

首先,我设置一个指向静态文件位置的环境变量:

export DJANGO_STATIC_ROOT=/home/<user>/<project>/staticfiles
Run Code Online (Sandbox Code Playgroud)

在设置.py中:

## Static files

STATIC_URL = '/static/'

if DEBUG:
    STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
else:
    STATIC_ROOT = environ['DJANGO_STATIC_ROOT']

## Whitenoise - Insert in 2nd place after SecurityMiddleware

MIDDLEWARE_CLASSES.insert(1,'whitenoise.middleware.WhiteNoiseMiddleware')

# Add app before django.contrib.staticfiles to enable Whitenoise in development

for i, app in enumerate(INSTALLED_APPS):
    if app == 'django.contrib.staticfiles':
        insert_point = i
INSTALLED_APPS.insert(insert_point,'whitenoise.runserver_nostatic')
Run Code Online (Sandbox Code Playgroud)

每次部署应用程序时,请务必运行collectstatic命令来更新DJANGO_STATIC_ROOT位置中的文件:

./manage.py collectstatic
Run Code Online (Sandbox Code Playgroud)

祝你好运!