Any way to force reset of all cached static files on AppEngine?

被刻印的时光 ゝ 提交于 2020-07-06 06:41:20

问题


I am running into a known AppEngine issue where the wrong static content is cached if I go to a particular URL for my app, but the right static content shows up if I append a ?foo parameter to bust the cache, and VERSION.myapp.appspot.com works too.

Is there any way to get the correct content showing up at the unmodified URL?

I would be happy to delete the app and restore it or anything drastic. The app isn't live, but I need it to be in a couple of hours. Anything to get those URLS working so the mobile app talking to the AppEngine app gets the right data.

EDIT

cURLing the headers, I see:

HTTP/1.1 200 OK
ETag: "ZN9VxQ"
Date: Tue, 14 Aug 2012 02:00:58 GMT
Expires: Wed, 15 Aug 2012 02:00:58 GMT
Content-Type: text/html
Server: Google Frontend
Cache-Control: public, max-age=86400
Age: 34623
Transfer-Encoding: chunked

Am I hosed for another 50,000 seconds? Anyway to shorten that?

EDIT FOR COMMENTS:

In app.yaml, I have this handler:

- url: /static
  static_dir: static
  expiration: 1s

I have now tried removing the expiration:

- url: /static
  static_dir: static

And I added this to the top of app.yaml, based on the docs:

default_expiration: "1m"

Also, deleting files doesn't make them disappear when I deploy.


回答1:


It the depends on what cache-control is used. Check in firebug och chrome inspector and see what expiration date are set.

If you've set the cache-control to public you can't affect the control since the files are cache on various proxies and server along the way.

If you use cache-control private you should be able to reset you browser cache and be fine, but as you say sometimes you get the wrong files from Google's production environment. I've had the same problem. The fastest solution is to add a query param to the files loaded.




回答2:


There is a way to shorten the expiration time for static files cached by your app on Google Cloud.

Head to your Google Cloud Console and open your project. Under the left hamburger menu, head to Storage -> Browser. There you should find at least one Bucket: your-project-name.appspot.com. Under the Lifecycle column, click on the link with respect to your-project-name.appspot.com. Delete any existing rules, since they may conflict with the one you will create now.

Create a new rule by clicking on the 'Add rule' button. For the object conditions, choose only the 'Newer version' option and set it to 1. Don't forget to click on the 'Continue' button. For the action, select 'Delete' and click on the 'Continue' button. Save your new rule.

This new rule will take up to 24 hours to take effect, but at least for my project it took only a few minutes. Once it is up and running, the version of the files being served by your app under your-project-name.appspot.com will always be the latest deployed, solving the problem. Also, if you are routinely editing your static files, you should remove any expiration element from handlers related to those static files and the default_expiration element from the app.yaml file, which will help avoid unintended caching by other servers.



来源:https://stackoverflow.com/questions/11949367/any-way-to-force-reset-of-all-cached-static-files-on-appengine

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!