显示标签为“GAE”的博文。显示所有博文
显示标签为“GAE”的博文。显示所有博文

星期一, 五月 04, 2009

管理你的Google app engine项目 - 使用 Google 工具栏发送

目前我们还不能从Google app engine直接管理项目代码文件,但是已经有人开发了相关的功能。早前,manatlanzipme能够将Google app engine项目打包成zip文件下载到本地。最近,chendaoan Chen BaipingGAE App files browser实现了更多管理的功能,看起来有点象Google app engine的管理页面了。

GAE App files browser目前能够做到:

1. 在线浏览GAE项目文件

  • 查看app目录结构和文件
  • 查看文件内容
  • 下载文件
  • 压缩目录到zip文件并下载

2. 在线运行和调试app

  • 在线python解析
  • 检查支持GAE的函数和模块
  • 快捷的调试GAE app

您可以访问http://enter.appspot.com/查看演示,从http://code.google.com/p/appfilesbrowser/下载代码。

文件编辑、删除和更名受制于Google app engine对文件系统访问的限制还无法实现,不过如果能够加上代码语法高亮,那一定很cool。我用google code prettify做了尝试,效果还不错。

1. 修改listfiles.py:

from django.utils.html import escape ... class MainFile(webapp.RequestHandler):     def get(self):         unicode_fn= self.request.get('fn')         fn = unicode_fn.encode('ascii', 'ignore')         filename=fn          show_code = False          iLastSlash = fn.rfind('/')         if iLastSlash>=0:             filename=fn[iLastSlash+1:]         fullpath=ROOT_DIR+'/'+fn #        self.response.out.write('get file=' + filename) #        return         if fullpath.find('./')==0:             fullpath=fullpath[2:]         if fullpath.find('./')==0:             fullpath=fullpath[2:]         logging.info(' fn='+fullpath)          if os.path.isfile( fullpath ): #            logginginfol('222222  fn='+fullpath)             if self.request.get('op')=='view':                 logging.info('view='+fullpath)                 if re.match('.*\.gif$', fn, re.IGNORECASE) :                     self.response.headers[ 'Content-Type'] = 'image/gif'                 elif re.match('.*\.jpe?g$', fn, re.IGNORECASE) :                     self.response.headers[ 'Content-Type'] = 'image/jpeg' #                    logging.info(self.response.headers[ 'Content-Type'])                 elif re.match('.*\.bmp$', fn, re.IGNORECASE) :                     self.response.headers[ 'Content-Type'] = 'image/x-ms-bmp'                 elif re.match('.*\.png$', fn, re.IGNORECASE) :                     self.response.headers[ 'Content-Type'] = 'image/x-png'                 elif re.match('.*\.tiff?$', fn, re.IGNORECASE) :                     self.response.headers[ 'Content-Type'] = 'image/tiff'                 else:                       show_code = True             else:                 logging.info('download='+fullpath)                 self.response.headers[ 'Content-Type'] = 'application/octet-stream'                 self.response.headers[ "Content-Disposition"]= "attachment;filename="+filename;             #a file             f = open( fullpath, 'rb')             while True:                 buf = f.read(1<<20) #1M, file length exceed 1M will be truncat by GAE.                 if buf:                   if show_code:                     template_values = {'buf': buf,}                     self.response.out.write(template.render('showcode.html', template_values))                   else:                     self.response.out.write(buf)                 else:                     break                  ...

2. 新建template文件:showcode.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html>   <head>     <link href="/static/prettify.css" type="text/css" rel="stylesheet" />     <script src="/static/prettify.js" type="text/javascript"></script>     <style>       pre { font-family: Verdana,Arial,Helvetica; font-size: 11px;}     </style>   </head>   <body onload="prettyPrint()">     <pre class="prettyprint" > {{ bufescape }}     </pre>   </body> </html>

当然,您也可以不用template,直接在listfiles.py文件response.out.write() html代码。

3. 下载google code prettify保存在static目录。

最后的效果:

py

screenshoot-py

css

screenshoot-css

js

screenshoot-js

yaml

screenshoot-yaml


......


详细内容...

如何让PHP在Google App Engine上运行 << .::灵狼天::. - 使用 Google 工具栏发送

话说前不久 Google App Engine 支持了第二种语言 Java,占据GAE需求排行榜的 java终于支持了,如果按这样的思路执行下去,那么不久的第三个语言肯定就是 PHP了!不过貌似大家都按耐不住这份心情,对 GAE 开始了各种的尝试,不过这里不能不说 java 是一个好东西,扩展和应用非常的广泛,于是乎就有了Quercu,它是一个 java 的应用,简单的说就是 PHP in Java。利用 Jetty(一款 Java 的web服务器)+ Quercus 就能让你在未开放 PHP语言支持的 GAE 上面运行 PHP代码,甚至把 Java 的类导入到 PHP里面执行!这就是 Quercus 的魔力。同样的如果你是 Ruby 用户,可以使用 JRuby 实现执行。好吧,下面开始实践:(方法来自:Brian's World

部署环境:Windows XP + Eclipse 3.4 + GAE for Java eclipse 3.4 plugins(如果使用官方教程无法安装,请参见另类安装教程

首先,下载支持库类。肯定得需要 Jetty,Quercus 的 jar 包(由于 GAE 的版本限制,或许只支持目前的版本包,如果链接失效请搜索同样版本的jar包或者在本文的末尾下载整个演示工程的 war 包),第一个是 jetty-util-6.1.0.jar, quercus.jar(Quercus 3.1.6 jars版本,最新版的 3.2.x 不支持 以及 Quercus 包中的 resin_util.jar(这两个的下载页面),这三个下载完毕之后放置在 GAE 工程的 "war/WEB_INF/lib" 目录下面并为把 lib 整个目录设置为编译环境(Build Path)。

然后开始 Quercus的参数配置,编辑 "war/WEB_INF/web.xml" 文件,在<web-apps></web-apps>中间的适当位置加入:

1 2 3 4 5 6 7 8 9 10 11 12 13 
<servlet> <servlet-name>Quercus Servlet</servlet-name> <servlet-class>com.caucho.quercus.servlet.QuercusServlet</servlet-class> <init-param> <param-name>ini-file</param-name> <param-value>WEB-INF/php.ini</param-value> </init-param> </servlet> <!-- 其他配置 --> <servlet-mapping> <servlet-name>Quercus Servlet</servlet-name> <url-pattern>*.php</url-pattern> </servlet-mapping>

上面的 "WEB-INF/php.ini" 是自己创建的文件,并非 PHP 环境下复制过来的哦,留空即可,貌似没有加入这个文件,就无法运行。

另外还需要在 "WEB-INF/appengine-web.xml" 加入下面代码:

1 2 3 4 5 6 7 
<static-files> <exclude path="/*.php" /> </static-files> <resource-files> <include path="/**.php" /> </resource-files> </strong>

以上完成之后,就可以进行 PHP 代码的测试了,把你要运行的 php 文件放在 "WEB-INF" 目录下面即可。然后通过部署上传就可以看到 php 的完美运行了,本人的测试地址:http://go-ogle.appspot.com/info.php

更多使用方法请看 Quercu 官方网站的相关文档。

附图(图片来自Brian's World,如果失效,请下载下面的整个工程查看):
php on gae

php on gae

整个测试工程下载(包含上面必需的 jar 包和所有配置和测试文件):下载@Box.net


......


详细内容...

Google App Engine 开始支持 Java - 使用 Google 工具栏发送

Google 的 Web 程序云计算平台 App Engine 开始支持 Java 语言,现在 App Engine 用户可以使用标准的 Java API 去创建 Web 程序,并且可以使用 Google 的 Web Toolkit 去创建 AJAX 组件。所以 App Engine 对 Java 的支持是全方面的,包含了服务器端和前端。对于 Eclipse IDE 的用户,Google 也发布了一个插件让你快速在 Eclipse 上使用 App Engine。

另外这次 Google App Engine 升级还包括了一下功能:

  1. 安全数据连接器,它能让你从一个中心控制 Google Apps 的数据访问的管理。
  2. 数据导入工具,它能让你非常容易导入几 G 的数据到 App Engine,导出工具正在开发。
  3. 定制任务,可以让你定时运行一些作业,如报表和数据库清理。

早前 App Engine 发布的时候只支持 Python 语言,但是和 Java 语言相比之下,Python 的用户不是那么多,并且 Java 在企业级的应用更加广泛,所以 Google App Engine 支持 Java 语言对于云计算来说意义重大,让人们意识到云计算并不是像云一样飘渺的,还是实实在在能够给企业运营带来效率,并且还能降低成本。对 Java 语言的支持,让 App Engine 最近步入商用,并且走入企业级应用成为了可能。

从去年开始,云计算逐步发展,到现在已经开始最近有了成效。Amazon 的 S3 服务解决了很多 Startup 公司的存储服务的问题,并且价格低廉,不仅给创业公司节约了成本,并且让他们能够集中精力在自己网站的事务处理和开发上面。微软也推出了自己的云计算操作系统:Windows Azure,提供 从 Live 服务,数据服务,到 SharePoint 和 Microsoft Dynamics CRM 的空间服务等一些系列服务。IBM 的云计算已经进入了商用,并且在中国无锡开始进行了商用。现在 Google 的 Web 程序云计算平台 App Engine 也开始支持 Java 版本,这一切都说明云计算就在我们身边。


......


详细内容...

google app engine如何删除我上传的文件

  将你的Project中的app.yaml中的version改成另外一个整数,比如:2。然后update你的项目,之后到你app engine中的Dashboard下的Administration-Versions中选择将某个Version设置成Default就行了。

......


详细内容...

重见天日: Google App Engine for Java的JSP中文问题 - 使用 Google 工具栏发送

重见天日: Google App Engine for Java的JSP中文问题

现象:直接使用java-sdk上传或使用eclipse上传后发现JSP中的中文是乱码的,Servlet在设置好request和respone的encoding后处理中文没有问题。

在使用命令行方式上传中文的JSP时,我发现有一个JSP报错如下:
--------------------------------------
8% Compiling jsp files.
2009-4-10 8:43:16 org.apache.jasper.JspC processFile
信息: Built File: \a.jsp
11% Compiling java files.
C:\DOCUME~1\keel\LOCALS~1\Temp\appcfg53496.tmp\WEB-INF\classes\org\apache\jsp\a_
jsp.java:43: 警告:编码 GB18030 的不可映射字符
out.write("...head>\r\n meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\r\ntitle>���浜??/title>\r\nhead>\r\nbody>\r\n");
1 警告
--------------------------------------
(因为blog发表的要求,部分html代码作了改动)

这说明在使用org.apache.jasper.JspC processFile进行Compiling jsp files使用了GB18030而不是UTF-8,而且在生成的临时文件夹中可以看到jsp编译后的.java文件直接就是乱码的,所以,并不是googleApp的server不支持,而是appengine-java-sdk的JSP编译器的编码有问题。对于这个问题,我在googleApp for java的groups上提问了,参考:How to change the JspCompiler's encoding

sdk的上传参数很简单,再看了文档,好像在builder.xml中可以通过ant进行一些设定,但涉及到update操作时还是没有办法。

再经过对appengine-java-sdk一番研究,发现居然没有地方可以设置JSP编码选项(在appengine-local-runtime.jar(lib/impl)中com\google\appengine\tools\development\webdeafault.xml 中可以加上javaEncoding,但没有用),而且这个java的sdk似乎没有源文件下载,也就无法从根本上解决这个问题(反编译?没必要吧),不过相信过不了多久,SDK的源码发布后就可以解决这个问题,或者GOOGLE自己会加上这个参数设置就更好了。

后来发现jxva回了我的帖子,并给出了JSP中文的解决办法,对JSP中的中文进行转码,就像我们以前在处理WAP的中文问题一样,他给出了一个方法:
-----------------------------------
public static String encode(String str) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < c =" str.charAt(i);" a =" (char)"> 255) {
sb.append("&#").append(a).append(';');
} else {
sb.append(c);
}
}
return sb.toString();
}
-----------------------------------
效果可以看他的app:http://jxva-framework.appspot.com/

这种方法可以暂时解决JSP的中文问题,甚至可以写一个ant脚本对JSP进行预处理,目前也只有如此了。此外,把windows的默认编码设置为utf-8应该也能起作用,如果有办法改的话。

......


详细内容...

重见天日: Google App Engine for Java的eclipse插件下载及体验 - 使用 Google 工具栏发送

重见天日: Google App Engine for Java的eclipse插件下载及体验

Google App Engine for Java的eclipse插件非常好!
很多烦琐的操作和步骤都代劳了。
比如:
  • 创建project项目的结构
  • 加入jdo,jpa的相关lib
  • build时使用的jdo优化
  • 直接集成jetty服务器测试
  • 最重要的,直接deploy,也就是上传你的APP

AppEngine for Java的eclipse插件下载


一切都很好,但是第一次下载时简单慢得夸张(eclipse3.4- ganymede),其根本原来原来是ganymede的update目录下载不了(这个是从eclipse的官网下的,google不会这么慢)。

这里提供一个Google App Engine for Java的 eclipse3.4-(ganymede) 插件下载:点击下载
此外还需要从google sdk下载其java sdk 下载地址:http://code.google.com/intl/en/appengine/downloads.html#Google_App_Engine_SDK_for_Java

下载后直接把plugins和feathers目录中的文件复制到eclipse相同目录中,启动后可以看到google的三个图标。点击第一个蓝色图标创建一个google web application,在对话框中可以看到Google SDKS里面有两个部分:
Google Web Toolkit --这个把它的勾去掉,如果需要可以去google下载后配置
Google App Engine --这个就是关键了,把它勾上(默认已勾),点击后面的蓝色链接configure SDKs... 然后在弹出的App Engine中add 一个从前面下载好后解压后的java sdk位置,如:D:\java\appengine-java-sdk\
填入相关的project名和包名,就可以开始体验Google App Engine for Java了!

......


详细内容...

用GOOGLE APP ENGINE上传应用程序

App Engine SDK 包括用于上传应用程序文件的命令。与 SDK 的其余部分一样,appcfg.py 可在装有 Python 2.5 的任何计算机上运行。

要上传应用程序文件,请通过 update 操作和应用程序根目录的名称运行 appcfg.py 命令。根目录应包含应用程序的 app.yaml 文件。

appcfg.py update myapp/

appcfg.py 将从 app.yaml 文件获得应用程序 ID,并提示您提供 Google 帐户的电子邮件地址和密码。使用您的帐户成功登录后,appcfg.py 将存储一个"cookie"以便在后续尝试时不需要提示输入密码。

要在提示时进行保存,可以使用 --email 选项在命令行上指定电子邮件地址。不能将密码指定为命令行选项。

appcfg.py --email=Albert.Johnson@example.com update myapp/

appcfg.py 选项

appcfg.py 命令包含一组选项、一个操作和该操作的参数。

包含以下操作:

appcfg.py [options] update <app-directory>

为给定了应用程序的根目录的应用程序上传文件。应用程序 ID 和版本从应用程序目录中的 app.yaml 文件获取。

appcfg.py [options] rollback <app-directory>

撤消给定应用程序的部分完成的更新。如果更新中断并且命令报告由于锁定而无法更新应用程序,则可以使用此操作。

appcfg.py [options] vacuum_indexes <app-directory>

删除 App Engine 中不使用的数据库索引。如果从 index.yaml 中删除某索引定义,则当上传应用程序时,该索引不会被自动删除,因为它可能正被另一版本的应用程序使用。当不再需要所有旧索引时执行此操作。

appcfg.py help <action>

打印有关给定操作的帮助消息,然后退出。

appcfg.py 命令接受以下适用于所有操作的选项:

--quiet

成功时不打印消息。

--verbose

打印有关命令正在执行的操作的消息。

--noisy

打印许多有关命令要执行的操作的消息。当与 App Engine 团队协作来解决上传问题时,此选项通常很有用。

--email=...

应用程序管理员的 Google 帐户的电子邮件地址,适用于需要登录的操作。如果 cookie 被遗漏且以前使用该命令时未存储 cookie,则该命令将提示输入该值。

--server=...

App Engine 服务器主机名。默认为 appengine.google.com

--host=...

用于与远程程序调用配合使用的本地计算机的主机名。

--no_cookies

请勿将管理员登录凭证存储为 cookie;每次登录时都提示输入密码。

--force

强制删除不使用的索引。默认情况下,上传应用程序不会从服务器中删除不使用的索引,即使这些索引未显示在 index.yaml 文件中。

--max_size=...

要上传的文件的最大大小,表示为字节数。不会上传大于该大小的文件。默认为 1048576。服务器当前将文件的最大大小强制定为 1,048,576 个字节,因此增加该值没有任何作用。

appcfg.py 和 HTTP 代理

如果您在 HTTP 代理后运行 appcfg.py,则必须告知 appcfy.py 该代理的名称。要为 appcfg.py 设置 HTTP 代理,请设置 http_proxy 环境变量。例如,在 bash shell 中:

export http_proxy="http://cache.mycompany.com:3128" appcfg.py update myapp

......


详细内容...

星期三, 四月 08, 2009

Google为App Engine增加Java支持

Google在周二宣布为他们的App Engine加入Java支持,Google App Engine 使您可以在支持 Google 应用程序的同一可扩展系统上构建网络应用程序。之前Google仅提供使用Python编写的程序,该语言虽然在Google内部很流行,但是在外面还未被广泛使用,所以Java支持成为Google App Engine 最急需的特性。

Google工程部门主管Graham Spencer在Campfire One活动上宣布,App Engine开始加入Java语言支持。另外Google还宣布了App Engine的其他特性,包括一个"cron"特性,允许用户安排特定的工作比如发送每周报告;还有一个安全数据连接器(Secure Data Connector)使得Google App Engine可以利用存储在公司防火墙背后的私密数据。另外还有一个全新的大规模数据导入工具,使得移动大量的数据到App Engine变得更加简单。

目前Java支持还处于测试模式,所以Google需要消除一些问题,比如与现有的Java软件开发工具和框架的兼容性问题。Google称,他们现在所发布的支持还尚不完整。


......


详细内容...

星期五, 十月 10, 2008

体验Google App Engine - Hello World - 贺星河的个人博客,Bitman,比特人的空间 - 使用 Google 工具栏发送

体验Google App Engine - Hello World - 贺星河的个人博客,Bitman,比特人的空间

1、安装好Python2.5
2、安装好Google App Engine SDK
3、进入Google App Engine SDK所在目录,建立和自己App同名的目录,我这里以3254为例
4、在3254目录下创建文件3254.py,输入以下内容

print 'Content-Type:text/plain'
print ''
print 'Hello,world!'
print '你好,北京2008'

5、将SDK里demos目录中的app.yaml文件拷贝到 3254中,进行如下修改
application: 3254
version: 1
runtime: python
api_version: 1

handlers:
- url: .*
  script: 3254.py

6、打开命令行CMD,上传3254中的文件

7、打开查看 http://3254.appspot.com/

这时候会发现出现错误了,原因是什么呢?原来是我们在 3254.py中有中文
print '你好,北京2008'

这时要在3254.py顶部添加一句
# coding=utf-8

保存后再重新上传即可

 8、这时候名为3254的app就配置好并可以访问了,但是老是要传到服务器上测试是不方便的,还好GAE提供了本地测试环境,还是以3254为例,我们使用如下命令将3254设置为默认项目

C:\Program Files\Google\google_appengine>dev_appserver.py 3254/

这时候就可以在本地打开 http://localhost:8080/ 进行测试了,记住CMD窗口不要关哦:)


......


详细内容...