在Google App Engine上使用Wagtail上传图像会导致OSError:[Errno 30]只读文件系统

问题描述

我正在尝试使用MysqL的云实例在Google Cloud App Engine标准环境中运行wagtail网站。我遵循了此处提供的文档:https://cloud.google.com/python/django/appengine

除了用户上载图片时,几乎所有内容都可以使用。当用户将映像上传到部署的站点时,会向该用户报告500错误,并且错误日志显示“ OSError:[Errno 30]只读文件系统”。

当我使用cloud sql代理在本地运行站点时,不会发生此错误,并且我可以上载图像。

您能告诉我为什么会发生这种情况,以及如何更改以避免部署中的此错误吗?

提前谢谢!

解决方法

您正在尝试将文件上传到文件系统(部署应用程序的目录)。 App Engine不支持此操作,因为随着您的应用程序扩展到新实例,这些文件将不会被复制,因此,如果该应用程序依赖于该文件,它将开始失败,因此,此行为可确保应用程序的安全性和可伸缩性。 / p>

有两种方法可以解决此问题,正如您在此answer上所看到的那样,我提供了与您面临的问题类似的问题:

  • 开始使用其他目录来存储它,例如/ tmp -使用这种方法,您还将面临前面提到的扩展问题,但对于临时文件,它会满足您的需求。
  • 使用云存储桶来存储永久性文件,这些文件可供您所有实例使用。这是扩展应用程序的理想解决方案。

通过遵循linkhere,您可以找到有关如何创建此文件的更多详细信息,并可以获取有关如何从Python应用程序将文件上传到Cloud Storage的示例。