【问题标题】:Google Cloud Storage file stuck in time after multiple updates/deletions谷歌云存储文件在多次更新/删除后卡在时间里
【发布时间】:2017-05-15 04:39:00
【问题描述】:

我有一个云存储文件及时冻结,不会让步。到目前为止,我有:

  • 重新收集静态文件 (Django) 并进行 rsync 更新

  • 删除有问题的静态文件,重新收集静态文件并进行 rsync 更新

  • 删除云存储控制台中的文件并重新同步

  • 删除了整个bucket,重新创建了一个同名的bucket,再次rsync了所有85个静态文件

最初几次我更改了静态文件、收集它们并进行了 rsync,它立即生效。现在我有了这一行

var URL = "http://%/api/recipes/delete/&/".replace("%", API_BASE).replace("&", recipe_id);

卡在时间里,冻结在这个桶里。在 Django 中,我的文件正确读取

var URL = "/api/recipes/delete/&/".replace("&", recipe_id);

更改已检入 git。

此存储 API 根本没有更新,即使我删除了该文件,该文件仍在提供服务。在我删除整个存储桶后,该文件仍在提供服务,这似乎是一个错误。文件是:

http://storage.googleapis.com/homebrew-api-static-bucket/static/main/index.js

但是,如果我从 Cloud Storage 控制台查看文件,我会得到正确的文件。

因此,即使存储桶中的文件是正确的,我的应用使用的文件在 2 多个小时后仍然过时

我在index.html 中提供文件,例如:

<script src="{% static "main/index.js" %}" type='text/javascript'></script>

settings.py:

STATIC_ROOT = os.path.join(BASE_DIR, 'static')

STATIC_URL = 'http://storage.googleapis.com/homebrew-bucket/static/'

如果即使删除和重新制作整个存储桶也不会改变任何东西,我就没有主意了。

【问题讨论】:

    标签: python django google-cloud-storage google-cloud-platform


    【解决方案1】:

    GCS 提供强大的先读后写一致性。如果您上传新版本的对象,然后将其下载回来,您将始终获得该对象的新版本。

    但是,默认情况下,当获取公开可读的对象时,GCS 会以“Cache-Control”标头进行响应,允许缓存长达 1 小时。 Google 本身、您的网络浏览器或您与 Google 之间的某些防火墙可能会根据该标头决定缓存您的对象。您可以通过再次获取对象并将一些虚假的 URL 参数添加到请求的末尾来检查这是否是问题,例如“?avoidTheCaches=1”。

    您可以通过将对象的“cacheControl”属性设置为“private”或“max-age=0”之类的值来防止这种情况发生。您可以将此属性设置为上传的一部分。您还可以修改现有对象的属性,但如果资源已被缓存,则必须等待一个小时才能看到新版本。

    【讨论】:

    • 这是有道理的。感觉就像我一直在等待,所以我只是做了一个不同名称的新桶,它起作用了。谢谢布兰登
    • 理论上这应该可行,但我遇到同样的问题不仅持续了一个小时,而且持续了好几天。
    • 我也遇到了图像更新问题。每次编辑后,我都会更新同名的用户个人资料图像。但是当我调用响应图像 URL 时,我的图像在很长一段时间后得到更新。是因为这个缓存问题吗?
    • 很有可能。默认情况下,缓存启用一小时。您可以指定上传对象时不应缓存它。尝试这样做,看看您的问题是否会消失。
    猜你喜欢
    • 2019-09-20
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    • 1970-01-01
    • 2021-05-07
    • 2020-08-04
    • 2021-01-12
    • 2021-03-30
    相关资源
    最近更新 更多