从网站上传图像时,Heroku 不会更新 github 文件系统
Heroku doesn't update github file system when an image is uploaded from website
我 运行 遇到从网站创建博客 post(包括图片)时 Heroku 不更新我的 GitHub 存储库(或静态文件系统)的问题.
其他图像幸存下来,而保存在我的文件系统中的图像与服务器 运行 在 heroku 上消失了。
我在他们的文档中找到了这个。
The Heroku filesystem is ephemeral - that means that any changes to the filesystem whilst the dyno is running only last until that dyno is shut down or restarted.
我还是很困惑为什么不是所有的图片都消失了,只有后来添加的才会消失。
AWS S3 是解决这个问题的方法吗?如果是,我如何使用存储桶表示我的文件系统?
说,对于博客Post 1我有2种图片分辨率,这意味着将文件存储在与这些分辨率相对应的不同文件夹中。
---1920x1920
-----picture.jpg
---800x800
-----picture.jpg
这是否意味着我必须创建 2 个名为 1920x1920
和 800x800
的存储桶,或者是否有更好的处理方式?
Is AWS S3 a solution for this?
S3是这个的推荐方案,配置是documented in Heroku DevCentre with specfic instructions for uploading from Python.
注意这些 Python 指令使用 直接上传 方法:让 flask 应用程序生成预签名的 URL,然后传回给客户端 Javascript 代码,以便用户的浏览器可以直接上传到 S3。图像的结果 S3 URL 然后被放入表单中的隐藏元素中,然后由您的应用程序在表单提交时接收。
您有不同的图像大小这一事实表明您的应用程序进行了一些处理(可能使用 PIL)来获取这些缩略图。在这种情况下,使用 Pass-Through 方法可能更容易,您的应用会实现自己的上传机制,进行处理,然后将缩略图上传到 S3(上传到 S3 部分是好的文档,例如 this SO thread).
传递方法带有警告,这可能会导致单线程工作者阻塞。如果您的站点收到大量请求导致这成为一个问题,您可能需要增加 gunicorn worker 的数量,或者更改为支持并发的 worker 类型(这 github post 有一些有用的 commands/info 在并发工作者类型上)。
实现这一切的最好方法(尽管对 redisgo dyno 和 worker dyno 的要求可能会让你进入付费阶段)可能是 with Background Tasks using rq
。您使用上面的直接上传方法上传原始图像,然后让后台作业下载该图像,调整大小,并将生成的缩略图放回 S3。
Does that mean I have to create 2 buckets named 1920x1920 and 800x800 or is there a better way of handling them?
为整个应用程序设置一个 Bucket,仅在对象的键中包含正斜杠以模拟子目录结构。
我 运行 遇到从网站创建博客 post(包括图片)时 Heroku 不更新我的 GitHub 存储库(或静态文件系统)的问题.
其他图像幸存下来,而保存在我的文件系统中的图像与服务器 运行 在 heroku 上消失了。
我在他们的文档中找到了这个。
The Heroku filesystem is ephemeral - that means that any changes to the filesystem whilst the dyno is running only last until that dyno is shut down or restarted.
我还是很困惑为什么不是所有的图片都消失了,只有后来添加的才会消失。
AWS S3 是解决这个问题的方法吗?如果是,我如何使用存储桶表示我的文件系统?
说,对于博客Post 1我有2种图片分辨率,这意味着将文件存储在与这些分辨率相对应的不同文件夹中。
---1920x1920
-----picture.jpg
---800x800
-----picture.jpg
这是否意味着我必须创建 2 个名为 1920x1920
和 800x800
的存储桶,或者是否有更好的处理方式?
Is AWS S3 a solution for this?
S3是这个的推荐方案,配置是documented in Heroku DevCentre with specfic instructions for uploading from Python.
注意这些 Python 指令使用 直接上传 方法:让 flask 应用程序生成预签名的 URL,然后传回给客户端 Javascript 代码,以便用户的浏览器可以直接上传到 S3。图像的结果 S3 URL 然后被放入表单中的隐藏元素中,然后由您的应用程序在表单提交时接收。
您有不同的图像大小这一事实表明您的应用程序进行了一些处理(可能使用 PIL)来获取这些缩略图。在这种情况下,使用 Pass-Through 方法可能更容易,您的应用会实现自己的上传机制,进行处理,然后将缩略图上传到 S3(上传到 S3 部分是好的文档,例如 this SO thread).
传递方法带有警告,这可能会导致单线程工作者阻塞。如果您的站点收到大量请求导致这成为一个问题,您可能需要增加 gunicorn worker 的数量,或者更改为支持并发的 worker 类型(这 github post 有一些有用的 commands/info 在并发工作者类型上)。
实现这一切的最好方法(尽管对 redisgo dyno 和 worker dyno 的要求可能会让你进入付费阶段)可能是 with Background Tasks using rq
。您使用上面的直接上传方法上传原始图像,然后让后台作业下载该图像,调整大小,并将生成的缩略图放回 S3。
Does that mean I have to create 2 buckets named 1920x1920 and 800x800 or is there a better way of handling them?
为整个应用程序设置一个 Bucket,仅在对象的键中包含正斜杠以模拟子目录结构。