如何解决Heroku Dyno 上的 Django 静态文件
我正在 Heroku 上运行 django 应用程序,目前使用 AWS S3 来提供我的静态文件。我们将静态文件存储在每个应用的静态文件夹中,以及目录根目录下的 static/
文件夹中。根目录下的 static/
文件夹大约有 40Mb。
每当我们将应用程序部署到 Heroku 时,静态文件都会包含在 Heroku slug 中,因此
heroku run python manage.py collectstatic --no-input
可以从 Dyno 本身运行,然后将任何更改的/新的静态文件复制到我们的 S3 存储桶中,以便提供服务。
问题是,在我们完成此过程后,我们现在在 Dyno 上有一个 static/
文件夹,它占用了大约 40Mb 的空间,并且看起来毫无用处,因为我们的文件是从我们的 S3 存储桶中提供的!
是否有更好的方法来部署我们的应用程序,并将我们的静态文件收集到我们的 S3 存储桶,但不是将静态文件复制到 Heroku?
我想到的一种方法是将所有静态文件添加到 Heroku 的 .slugignore 文件中,然后配置一种无需使用 Heroku 即可将静态文件上传到我们的 S3 存储桶的方法。不过,我不确定这是否是正确的方法,希望得到有关此方面的建议。
我们一直在研究这个问题的原因是我们的 Heroku slug 大小开始变得太大(~450Mb),我们需要开始减少它。
解决方法
经过更多的挖掘,我发现了一些人在做我上面描述的事情的例子,即将静态文件直接上传到 S3,而不使用任何中间存储。 This article 展示了如何配置 Django 和 S3,以便在本地机器上运行 python manage.py collectstatic
会将静态文件直接复制到 S3。
这种配置,结合在 Heroku (https://devcenter.heroku.com/articles/django-assets#disabling-collectstatic) 上禁用 collectstatic 并将我们的静态文件添加到 .slugignore
,正是我想要的,即直接将静态文件上传到 S3无需先将它们上传到 Heroku。
更多阅读来自Django' docs
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。