当前位置:首页 > 网站制作 > 正文内容

Google App Engine 文件代码备份

admin17年前 (2009-10-19)网站制作464

Google App Engine 不支持直接下载代码文件,所以我们无法直接将服务器上的代码进行备份。如果本地的代码一旦丢失,就很难找回,这点对GAE的用户来说,是相当麻烦的。

好在有人编写了一个工具,用于将GAE站点的代码打包成zip格式并下载

步骤如下:

1.在根目录下根据manatlan的代码建立zipme.py

2.在app.yaml中加入

- url: /zipme
script: zipme.py3.访问youapp.appspot.com/zipme

zipme.py脚本

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""
##########################################################################
ZipMe : GAE Content Downloader
##########################################################################
Just add this lines in your app.yaml :

- url: /zipme
script: zipme.py

##########################################################################
""" # manatlan

from google.appengine.ext import webapp
from google.appengine.api import users

import wsgiref.handlers
import zipfile
import os,re,sys,stat
from cStringIO import StringIO

def createZip(path):

def walktree (top = ".", depthfirst = True):
names = os.listdir(top)
if not depthfirst:
yield top, names
for name in names:
try:
st = os.lstat(os.path.join(top, name))
except os.error:
continue
if stat.S_ISDIR(st.st_mode):
for (newtop, children) in walktree (os.path.join(top, name),
depthfirst):
yield newtop, children
if depthfirst:
yield top, names

list=[]
for (basepath, children) in walktree(path,False):
for child in children:
f=os.path.join(basepath,child)
if os.path.isfile(f):
f = f.encode(sys.getfilesystemencoding())
list.append( f )

f=StringIO()
file = zipfile.ZipFile(f, "w")
for fname in list:
nfname=os.path.join(os.path.basename(path),fname[len(path)+1:])
file.write(fname, nfname , zipfile.ZIP_DEFLATED)
file.close()

f.seek(0)
return f


class ZipMaker(webapp.RequestHandler):
def get(self):
if users.is_current_user_admin():
folder = os.path.dirname(__file__)
self.response.headers['Content-Type'] = 'application/zip'
self.response.headers['Content-Disposition'] = \
'attachment; filename="%s.zip"' % os.path.basename(folder)
fid=createZip(folder)
while True:
buf=fid.read(2048)
if buf=="": break
self.response.out.write(buf)
fid.close()
else:
self.response.headers['Content-Type'] = 'text/html'
self.response.out.write("<a href=\"%s\">You must be admin</a>." %
users.create_login_url("/zipme"))

def main():
application = webapp.WSGIApplication(
[('/zipme', ZipMaker)],
debug=False)
wsgiref.handlers.CGIHandler().run(application)

if __name__ == "__main__":
main()
这段代码会通过google的身份认证来判断访问者是否可以下载代码,所以不用担心代码泄漏。不过还是希望Google可以提供代码备份和数据库备份的功能。
 

扫描二维码推送至手机访问。

版权声明:本文由博赚恋吧资源站发布,如需转载请注明出处。

本文链接:https://432l.com/post/1511.html

分享给朋友:

相关文章

2009年海外Web设计风潮—反 Box 布局

反 Box 布局Smashing Magazine 曾有一篇文章,讲到反 Box 布局。所谓反 Box 布局,就是不再拘泥与传统的 Box 布局模型,而是采用一种更有创意的的布局,然而需要指出,这种创意布局需要非常注意易用性问题,一种新的创意布局需要时间去慢慢成熟。 ...

Web2.0write:用web2.0 Logo尽情书写

Web2.0write:用web2.0 Logo尽情书写  试了一下26个英文字母,大家可以先看一下!并且有些字母还不只一种图案呕!网址:http://web2.0write.com/...

让blogger变得更漂亮!用Disqus实现Blogger页内评论

用Disqus实现Blogger页内评论 新版的Blogger支持了页内评论,支持OPenID和Google Account,详细方法可以查看Disqus页内留言方法只需要简单的三步:一注册之后,首先添加你的网站名称和链接;第二步,选择blogger平台;第三部上传你的Blogger模板(这里需要注意一点,有一个选项:Use Disqus on future blog entries o...

4月14日-5月13日Gvod激活码,狗狗日送IP30W

活动介绍: GVOD新版即将上线,本版上线将配合开放部份狗狗流量,为了让更多喜欢并支持GVOD的站长尽快获取狗狗流量,GVOD将通过此次活动为站长开通带量资格。 活动时间: 4月14日-5月13日 活动流程图: 其他说明:所有通过你的参赛邀请码加入GVOD的站长的播放量都将计入到你的成绩,当你自己的播放量+被邀请的站长的播放量只要有一天突破2000的时候,您就拥有了GVOD狗狗带流量资格...

恋吧发现并推荐一个博客同步工具—BlogSync

BlogSync是一个在博客之间进行同步复制的工具,它会自动比较两个博客之间的差异,找出不同的文章并列出来,供使用者选择,然后执行复制操作。经BlogSync复制的帖子可以保留原本的排版样式、发帖时间以及标签。你可以用BlogSync方便地维护镜像站点,也可以把它作为一个搬家工具。目前BlogSync支持Blogger(GDATA API)、MSN Live Spaces、WordPress、Dr...

恋吧推荐—CushyCMS超简易CMS 在线建设你的网站

   CushyCMS 是一套特别的内容管理系统(Content Management System, 简称 CMS),一般说到 CMS, 有经验的使用者大概会先想到可线上编辑的网站内容。没错,CushyCMS 让你可以轻松在浏览器内管理网站内容,不过与其他 CMS 软体比较不同的是 CushyCMS 採用 Web 为主架构,无须安装,使用者只要註册一个帐号、登入并新...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。