我正在探索使用whitenoise在Docker容器中打包的Django应用程序中提供静态文件。在文档中说:
在部署应用程序时,您需要运行./manage.py collectstatic将所有静态文件放入STATIC_ROOT中。 (如果您在Heroku上运行,那么这将自动为您完成。)
真的需要吗?我没有运行./manage.py collectstatic
,仍然可以使用静态文件。
如果不需要,这是一种优化吗?我试图避免在部署过程中采取不必要的步骤。
答案 0 :(得分:3)
如引述所言,Whitenoise提供STATIC_ROOT中的文件。 collectstatic
从STATICFILES_DIRS和任何应用程序特定的静态目录中收集文件,并将它们放入STATIC_ROOT。
但是在两种情况下,它将在不运行collectstatic的情况下提供文件。第一种是您的文件是否已在STATIC_ROOT中 。他们不应该这样,但是将STATIC_ROOT的值设置为包含源文件的目录是一个常见的错误。但是,在这种情况下,它不会例如找到需要收集的管理文件。
另一种情况是如果您使用DEBUG = True运行。 Whitenoise为其USE_FINDERS
setting继承了此值,这使得它看起来与collectstatic本身位于同一位置以提供文件。显然,您不想在启用DEBUG的情况下在生产环境中运行,但是可以显式设置此设置。但是正如该文档链接所指出的那样,这样做将禁用Whitenoise的缓存和压缩功能。