当我当时在 Heroku 中部署 django 应用程序时,出现“Compiled Slug Size is too Large”错误

Posted

技术标签:

【中文标题】当我当时在 Heroku 中部署 django 应用程序时,出现“Compiled Slug Size is too Large”错误【英文标题】:When I Deployed django app in Heroku at that time "Compiled Slug Size is too Large" error occurred 【发布时间】:2021-07-01 04:21:44 【问题描述】:

我按照article 中提到的确切步骤,将我的 django 项目部署到 heroku

但是,对于git push heroku master,我收到以下错误

git push heroku master

请任何人告诉我可能是什么问题。

仅供参考

我的项目根目录中有Procfilerequirements.txtruntime.txt。我也确信我的凭据是正确的。另外,我之前没有推送任何东西来掌握,我是这个应用程序的唯一所有者。

我的runtime.txt 有代码:python:3.7.9

我的Procfile 有代码:web: gunicorn cardamage.wsgi --log-file -

我的requirements.txt

absl-py==0.12.0
astunparse==1.6.3
cachetools==4.2.1
certifi==2020.12.5
chardet==4.0.0
cycler==0.10.0
dj-database-url==0.5.0
Django==1.10
django-heroku==0.3.1
gast==0.3.3
google-auth==1.28.0
google-auth-oauthlib==0.4.4
google-pasta==0.2.0
grpcio==1.36.1
gunicorn==20.1.0
h5py==2.10.0
idna==2.10
importlib-metadata==3.10.0
joblib==1.0.1
Keras==2.4.0
Keras-Applications==1.0.8
Keras-Preprocessing==1.1.2
kiwisolver==1.3.1
Markdown==3.3.4
matplotlib==3.4.1
numpy==1.20.2
oauthlib==3.1.0
opt-einsum==3.3.0
pandas==1.1.5
pickle5==0.0.11
Pillow==8.2.0
protobuf==3.15.7
psycopg2==2.8.6
pyasn1==0.4.8
pyasn1-modules==0.2.8
pyparsing==2.4.7
python-dateutil==2.8.1
pytz==2021.1
PyYAML==5.4.1
requests==2.25.1
requests-oauthlib==1.3.0
rsa==4.7.2
scikit-learn==0.24.1
scipy==1.4.1
seaborn==0.11.1
six==1.15.0
tensorboard==2.2.2
tensorboard-plugin-wit==1.8.0
tensorflow==2.2.0
tensorflow-estimator==2.2.0
termcolor==1.1.0
threadpoolctl==2.1.0
typing-extensions==3.7.4.3
urllib3==1.26.4
Werkzeug==1.0.1
whitenoise==5.2.0
wrapt==1.12.1
zipp==3.4.1

【问题讨论】:

嗨,Riya,欢迎来到 ***,PS:我也有同样的问题。我认为是因为带有用户名和密码的新 git 请不要添加文字图片 - 只需将文字直接放在问题中即可。 【参考方案1】:

heroku 中允许的最大 slug 大小(压缩后)为 500 MB。您编译的 slug-size 太大,因为您使用了 Tensorflow 模块。

Tensorflow 模块非常大(超过 500MB,Heroku 的限制),因为它支持 GPU。由于 Heroku 不支持 GPU,因此安装支持 GPU 的模块是没有意义的。

pip install tensorflow-cpu

只需在 requirements.py 中将 tensorflow 替换为 tensorflow-cpu

-------- 或 --------

只需将您的 TensorFlow 版本替换为 2.0.0 即可:

张量流==2.0.0

它的文件重量要轻得多,并且适合您的内存限制。此外,您可以使用 1.7.01.5.0 版本。

更新

您可以尝试通过多种方式减小蛞蝓大小。最简单的方法是将.slugignore 文件添加到您的应用程序中,以告诉 slug 编译器忽略您应用程序中的任何不必要的文件,例如静态资源。

要确定 files/folders 占用了 slug 中的空间,您可以像这样启动一次性测功机来检查 slug:

heroku run bash -a <appname>

在 dyno 中,您可以使用 du -ha --max-depth 1 /app | sort -hr 命令显示当前目录中的文件和文件夹,按大小排序: 例如。

~ $ du -ha --max-depth 1 /app | sort -hr
108M    /app
99M     /app/vendor
8.1M    /app/.heroku
448K    /app/lib
292K    /app/spec
8.0K    /app/Gemfile.lock
4.0K    /app/Procfile
4.0K    /app/Gemfile

这有助于确定大文件的位置。

您可能还会发现clearing the build cache 有助于减小 slug 的大小。

在您的情况下,您使用了tensorflowscikit-learnKeras 等。所有库都非常大。所以AWS 是您的最佳解决方案。

【讨论】:

感谢您的回复!我试过了,但是蛞蝓尺寸还是太大了。我想我将不得不 dockerize 和部署它,或者寻找其他一些云平台来部署。 @Riya 是的 dockerize 是最佳选择或 AWS 平台。查看我的更新答案。

以上是关于当我当时在 Heroku 中部署 django 应用程序时,出现“Compiled Slug Size is too Large”错误的主要内容,如果未能解决你的问题,请参考以下文章

在 Heroku 服务器上部署 Django 错误 (500) - 据说是静态文件问题

Heroku:Django Migration 版本未在部署中运行

当我将django应用程序部署到heroku时,该站点停止工作

Heroku 部署与 django 数据库问题

如何在 heroku 上部署 django+swamp dragon 实时聊天应用程序?

在 Heroku 上部署后 Django 管理员访问错误