Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Heroku-Redis内存>';maxmemory';在hobby:dev中有一个20MB的文件,它应该是25MB_Heroku_Redis_Celery_Heroku Redis - Fatal编程技术网

Heroku-Redis内存>';maxmemory';在hobby:dev中有一个20MB的文件,它应该是25MB

Heroku-Redis内存>';maxmemory';在hobby:dev中有一个20MB的文件,它应该是25MB,heroku,redis,celery,heroku-redis,Heroku,Redis,Celery,Heroku Redis,所以我尝试上传一个芹菜的文件,在我的Heroku网站上使用Redis。我正在尝试上载一个大小为20MB的.exe类型文件。Heroku在他们的爱好:开发部分说,可以上传的最大内存是25MB。但是,我正在尝试上传芹菜中的文件(将其从字节转换为base64,解码并发送到函数)得到kombu.exceptions.OperationalError:OOM命令在使用内存时不允许>maxmemory.error。请记住,当我尝试上载例如5MB文件时,它工作正常。但是20MB没有。我将Python与Flas

所以我尝试上传一个芹菜的文件,在我的Heroku网站上使用Redis。我正在尝试上载一个大小为
20MB
.exe
类型文件。Heroku在他们的爱好:开发部分说,可以上传的最大内存是
25MB
。但是,我正在尝试上传芹菜中的文件(将其从字节转换为base64,解码并发送到函数)得到
kombu.exceptions.OperationalError:OOM命令在使用内存时不允许>maxmemory.
error。请记住,当我尝试上载例如
5MB
文件时,它工作正常。但是
20MB
没有。我将Python与Flask框架结合使用,有两种方法可以将文件存储在DB中(Redis只是内存中的DB)。您可以将blob存储在DB中(对于小文件,比如几KBs),也可以将文件存储在内存中,并将指向该文件的指针存储在DB中

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

这里需要注意的是,Heroku有一个每24小时或在您部署新版本的应用程序时被擦除的应用程序

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

  • 编写一个小函数将文件存储在本地磁盘上(这是临时存储),并返回文件路径
  • 使用文件路径向芹菜添加任务,即芹菜任务的参数将是“文件路径”,而不是20MB数据的序列化blob
  • Celery worker进程在任务空闲时拾取您刚刚排队的任务并执行它
  • 如果您以后需要访问该文件,并且由于本地heroku磁盘只有临时磁盘,您必须将该文件放在一些永久性存储中,如AWS S3


    (我们之所以经历了所有这些困难,而没有将文件直接放在S3中,是因为对本地磁盘的访问速度很快,而S3磁盘可能位于其他位置的其他服务器场中,在那里保存文件需要时间。如果在主进程中尝试将文件写入S3,则web进程可能会显得缓慢/停滞。)

    下载文件后,我会立即删除该文件。所以没关系。除了如何将其存储在磁盘中之外,我没有使用localhsot,我可以只使用
    wb
    ?我真的不明白如何做第二种方法写入磁盘是一种非常常见的操作;阅读您正在使用的任何框架的文档/教程。如果您可以将整个20MB文件写入Redis,那么将文件路径作为字符串写入并不困难,只需将文件路径发送到Redis即可。然后从芹菜任务内的文件路径“读取”该文件。我不明白这有什么困难?问题是该文件不在我的计算机上,另一个客户正在向我发送该文件。是否有可能从芹菜中接收
    请求。获取数据()
    (客户的文件为字节)?您建议怎么做?