记得上回写了一篇《GAE缓存静态文件的方法》 ,本地测试是没有问题的,但是提交到GAE真实环境之后,静态的资源文件就找不到了。我以为我的那种方法是GAE不支持,也就放弃了,又尝试了另一种方法,在本地又测试好了,今天为了弄Google Friend Connect,第一次部属到GAE上,发现根本就找不到静态文件,当场晕倒,差点就想放弃不自己做blog了。喝了一下水,想了想,突然想出来可能是app.yaml里的声明和有关系,就索性将app.yaml里的staic属性都删掉,再上传,竟然好了。

      上面那段话可能写得云里雾里,我还是通过例子来说明GAE通过Django来缓存静态文件的方法吧,这种更简单,都不用自己写代码。用Django的可以看看Django的这篇官方文档《How to serve static files》。

假设静态文件在我的根目录下的static目录下:

1、app.yaml
把原来的这些static_dir这几行都注掉或删掉,不要了。如果加上了并照着下面的步骤做完,会找不到任何静态文件的,服务器返回404.
#- url: /static
# static_dir: static
# secure: always

2、settings.py
MEDIA_ROOT = ‘./static/’
MEDIA_URL = ‘smedia’  
ADMIN_MEDIA_PREFIX = ‘/static/’

3、urls.py
from django.conf import settings

urlpatterns = patterns(’’,
   (r’^smedia/(?P<path>.*)$’, ‘django.views.static.serve’,{‘document_root’: settings.MEDIA_ROOT}),
)
#在这里交由Django处理了。

4、静态文件的引用
写成那样的形式就好了,如果写APP的话,可能要写完绝对路径。
        <link rel="shortcut icon" href="/smedia/images/favicon.ico" type="image/x-icon" />
        <link type="text/css" href="/smedia/css/styles.css" rel="stylesheet">

       交由Django处理static文件,什么都不用担心了,会自动缓存静态文件的,第二次访问就返回304了。