2

我正在探索使用whitenoise在打包在 Docker 容器中的 Django 应用程序中提供静态文件。在文档中它说:

作为部署应用程序的一部分,您需要运行 ./manage.py collectstatic 将所有静态文件放入 STATIC_ROOT。(如果你在 Heroku 上运行,那么这会自动为你完成。)

这真的需要吗?我没有运行./manage.py collectstatic,仍然提供静态文件。

如果不需要,是否是优化?我试图避免在我的部署过程中采取不必要的步骤。

4

1 回答 1

7

正如引用所述,Whitenoise 提供来自 STATIC_ROOT 的文件。collectstatic从 STATICFILES_DIRS 和任何特定于应用程序的静态目录中收集文件并将它们放入 STATIC_ROOT。

但是有两种情况,它会在不运行 collectstatic 的情况下提供文件。第一个是您的文件是否已经在 STATIC_ROOT 中。它们不应该是,但是将 STATIC_ROOT 的值设置为包含源文件的目录是一个常见的错误。但是,在这种情况下,它不会找到例如需要收集的管理文件。

另一种情况是如果您使用 DEBUG=True 运行。Whitenoise 为其USE_FINDERS设置继承了此值,这使其看起来与 collectstatic 本身在相同的位置提供文件。显然,您不希望在启用 DEBUG 的情况下在生产环境中运行,但您可以明确设置此设置。但正如该文档链接指出的那样,这样做会禁用 Whitenoise 的缓存和压缩功能。

于 2018-11-07T12:31:50.630 回答