虽然我不确定我是否完全理解问题的根本原因,但我解决了症状,我想在这里发帖,以便遇到相同问题的其他人需要帮助。
同时发生了两个不同的问题。
首先,我在每个测功机上运行了太多的 gunicorn 工人。他们吞噬了很多内存(原因我还不知道——Heroku 有点像黑匣子)并减慢了一切速度。更改我的 Procfile 以便每个测功机只有一个 gunicorn 工人解决了这个问题,至少现在是这样。
我的 Procfile 现在看起来像:
web: newrelic-admin run-program gunicorn myapp.wsgi --workers=1 --timeout=25
其次,事实证明我的 s3 存储桶中充满了我的应用程序自动生成的 > 100k JavaScript(我正在使用一个名为 django_compressor 的工具),当 Heroku 在部署期间运行 collectstatic 时,它试图检查 s3 上的任何内容是否发生了变化,需要它迭代超过 100k 个文件。这导致每次我尝试将新部署推送到 Heroku 时都会发生超时。
django_compressor 造成了这种情况,因为我不小心在 base.html 中包含了一个用于 {% compress js %} 标记内的其他 JavaScript 的块。
不要这样做:
{% compress js %}
<script src="..." />
<script src="..." />
{% block additionaljs %}{% endblock %} <--- BAD -- should be outside of the {% compress %} tags
{% endcompress %}