Heroku Dyno 上的 Django 静态文件

Django Static Files on Heroku Dyno

我正在 运行在 Heroku 上安装一个 django 应用程序,目前使用 AWS S3 来提供我的静态文件。我们将静态文件存储在每个应用程序的静态文件夹中,也存储在目录根目录的 static/ 文件夹中。根目录下的 static/ 文件夹大约有 40Mb。

每当我们将应用程序部署到 Heroku 时,静态文件都包含在 Heroku slug 中,因此 heroku run python manage.py collectstatic --no-input 可以是来自 Dyno 本身的 运行,然后它将任何 changed/new 静态文件复制到我们的 S3 存储桶中,以便可以提供它们。

问题是在我们完成这个过程之后,我们现在在 Dyno 上有一个 static/ 文件夹,它占用了大约 40Mb 的 space,而且似乎没有用,因为我们的文件正在被提供来自我们的 S3 存储桶!

是否有更好的方法来部署我们的应用程序并将我们的静态文件收集到我们的 S3 存储桶但将静态文件复制到 Heroku?

我想的一种方法是将所有静态文件添加到 Heroku 的 .slugignore 文件中,然后配置一种方法将静态文件上传到我们的 S3 存储桶,而根本不使用 Heroku。不过,我不确定这是否是正确的处理方式,希望对此提出建议。

我们一直在研究这个问题的原因是我们的 Heroku slug 大小开始变得太大(~450Mb),我们需要开始减少它。

经过更多的挖掘,我发现了一些人在做我上面描述的事情的例子,即在不使用任何中间存储的情况下将静态文件直接上传到 S3。 This article 显示如何配置 Django 和 S3,以便 运行 python manage.py collectstatic 在您的本地计算机上将静态文件直接复制到 S3。

此配置结合在 Heroku 上禁用 collectstatic (https://devcenter.heroku.com/articles/django-assets#disabling-collectstatic) 并将我们的静态文件添加到 .slugignore,这正是我想要的,即直接上传静态文件到 S3,而不先将它们上传到 Heroku。

阅读更多 Django' docs