我有一个文件夹static
:
static
-->css
----> main.css
-->images
----> image.png
Settings.py
:
STATICFILES_DIRS=[
os.path.join(BASE_DIR, "static"),
]
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, "static_cdn")
我跑了collectstatic
现在我在static_cdn
中有images
,css
和admin
(以前从未看过这最后一个)。
当我运行服务器时,它仍然不使用静态文件。
如何在不使用apache或nginx或类似东西的情况下将我的静态文件提供给服务器?
答案 0 :(得分:1)
Django在生产环境中不提供静态文件,但会保持链接。当您的调试在生产环境中为假时,这里就是名为whitenoise的django应用程序在此处救援的地方。
在您的Django应用上安装whitenoise:
pip install whitenoise
然后
pip freeze > requirements.txt
之后,将此中间件添加到您的django项目设置中
MIDDLEWARE = [
# 'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
# ...
]
然后添加此行
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
然后将这段代码推送到生产服务器,并确保您运行collectstatic
命令,即python manage.py collectstatic
您的静态文件现在应该可以工作了。
答案 1 :(得分:1)
以下是常见的DigitalOcean解决方案:
创建一个新的space并连接到它,例如通过MobaXterm。
然后,您可以访问文件存储,您基本上只需要在manage.py目录中运行collectstatic
。
这里是official DigitalOcean Tutorial on deploying Django apps
与DigitalOcean一起部署时,您将需要nginx。
DigitalOcean空间在后台与Amazon S3 Bucket一起使用,因此您可以直接设置一个存储桶并使用它,但是对我而言,艰难的选择没有任何好处。只需使用DigitalOcean Space
,因为它可以完美地链接到您的droplet
。
答案 2 :(得分:0)
要在生产环境中存储静态文件,您将需要诸如S3存储桶或其他某种外部存储之类的东西。部署到Heroku时,我喜欢使用whitenoise,因为它非常易于使用。这是配置示例:
MIDDLEWARE = [
# ...
'whitenoise.middleware.WhiteNoiseMiddleware',
]
# ...
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'build/static')
]
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'