Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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.

like image 800
Andrew Johnson Avatar asked Aug 14 '12 09:08

Andrew Johnson


1 Answers

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.

like image 179
Gabriel H. Nunes Avatar answered Sep 21 '22 12:09

Gabriel H. Nunes