Google 多次 updates/deletions 后云存储文件卡在时间上
Google Cloud Storage file stuck in time after multiple updates/deletions
我有一个及时冻结的云存储文件,不会让步。到目前为止我有:
重新收集静态文件 (Django) 并执行 rsync 更新
删除了有问题的静态文件,重新收集了静态文件并进行了 rsync 更新
删除了云存储控制台中的文件并重新同步
删除了整个桶并创建了另一个同名桶,并再次将所有 85 个静态文件 rsync 到它上面
前几次我更改了静态文件,收集了它们,然后 rsynced,它立即起作用。现在我有这一行
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/'
如果即使删除并重新制作整个存储桶也不会改变任何东西,我就不知道了。
GCS 提供了很强的 read-after-write 一致性。如果您上传新版本的 object 然后再下载回来,您将始终获得新版本的 object。
但是,默认情况下,当获取公开可读的 object 时,GCS 会以 "Cache-Control" header 响应,允许缓存长达 1 小时。 Google 本身、您的网络浏览器或您与 Google 之间的某些防火墙可能会根据 header 决定缓存您的 object。您可以通过再次获取 object 并将一些伪造的 URL 参数附加到请求的末尾来检查这是否是问题所在,例如“?avoidTheCaches=1”。
您可以通过将 object 的 "cacheControl" 属性 设置为 "private" 或 "max-age=0" 之类的内容来防止这种情况发生。您可以将此 属性 设置为上传的一部分。您还可以为现有的 object 修改 属性,但是如果资源已经被缓存,您将不得不等待一个小时才能看到新版本。
我有一个及时冻结的云存储文件,不会让步。到目前为止我有:
重新收集静态文件 (Django) 并执行 rsync 更新
删除了有问题的静态文件,重新收集了静态文件并进行了 rsync 更新
删除了云存储控制台中的文件并重新同步
删除了整个桶并创建了另一个同名桶,并再次将所有 85 个静态文件 rsync 到它上面
前几次我更改了静态文件,收集了它们,然后 rsynced,它立即起作用。现在我有这一行
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/'
如果即使删除并重新制作整个存储桶也不会改变任何东西,我就不知道了。
GCS 提供了很强的 read-after-write 一致性。如果您上传新版本的 object 然后再下载回来,您将始终获得新版本的 object。
但是,默认情况下,当获取公开可读的 object 时,GCS 会以 "Cache-Control" header 响应,允许缓存长达 1 小时。 Google 本身、您的网络浏览器或您与 Google 之间的某些防火墙可能会根据 header 决定缓存您的 object。您可以通过再次获取 object 并将一些伪造的 URL 参数附加到请求的末尾来检查这是否是问题所在,例如“?avoidTheCaches=1”。
您可以通过将 object 的 "cacheControl" 属性 设置为 "private" 或 "max-age=0" 之类的内容来防止这种情况发生。您可以将此 属性 设置为上传的一部分。您还可以为现有的 object 修改 属性,但是如果资源已经被缓存,您将不得不等待一个小时才能看到新版本。