Heroku-Redis内存>'maxmemory',在hobby:dev中有20MB的文件,应该为25MB

问题描述 投票:1回答:1

[因此,我试图在我的Heroku网站上使用芹菜上传使用Redis的文件。我正在尝试上传大小为.exe20MB类型文件。 Heroku在他们的爱好中说:dev部分,可以上传的最大内存为25MB。但是我正在尝试在Celery中上载文件(将其从字节转换为base64,对其进行解码并将其发送给函数)正在出现kombu.exceptions.OperationalError: OOM command not allowed when used memory > 'maxmemory'.错误。请注意,当我尝试上传5MB文件时,它可以正常工作。但是20MB没有。我在Flask框架中使用Python

mb-兆字节

heroku redis celery heroku-redis
1个回答
0
投票

有两种方法可以在DB中存储文件(Redis只是内存数据库)。您可以将blob存储在数据库中(对于较小的文件,例如几个KB),也可以将文件存储在内存中,并将指向文件的指针存储在数据库中。

enter image description here

因此,根据您的情况,将文件存储在磁盘上,仅将文件指针放在数据库中。

这里发现,Heroku的Ephemeral file system每24小时或部署新版本的应用程序都会被擦除。

因此,您必须执行以下操作:

  1. 编写一个小的函数,将文件存储在本地磁盘上(这是临时存储),并返回文件的路径
  2. 将具有文件路径的任务添加到Celery,即Celery任务的参数将是“文件路径”,而不是20MB数据的序列化Blob。
  3. 芹菜工人进程在空闲时选择刚入队的任务并执行。

[如果您以后需要访问文件,并且由于本地heroku磁盘仅具有临时性,则必须将文件放置在某些永久性存储中,例如AWS S3。

[ 。并且,如果您尝试在主流程中将文件写入S3,则您的Web流程可能显示为缓慢/卡住。)
© www.soinside.com 2019 - 2024. All rights reserved.