实验目的:
用flex在GAE上运行python代码
实验器材:
pyamf,FLEX3,Python25,IE,GAE SDK
实验准备:
GAE代码一份,flex代码一份
见下:
python部分
main.py
# -*- coding:utf-8 -*-
import wsgiref.handlers
import sys
import urllib2
from google.appengine.ext import webapp
from pyamf.remoting.gateway.google import WebAppGateway
class MainPage(webapp.RequestHandler):
def get(self):
self.response.headers['Content-Type'] = 'text/plain'
self.response.out.write('Hello, webapp World!')
def echo(data):
p=urllib2.urlopen("http://www.sina.com.cn")
return data
services = {
'myservice.echo': echo,
}
def main():
application_paths = [('/', WebAppGateway(services)), ('/helloworld', MainPage)]
application = webapp.WSGIApplication(application_paths, debug=True)
wsgiref.handlers.CGIHandler().run(application)
flex部分
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init();">
<mx:Script>
<![CDATA[
import flash.net.*;
import mx.controls.Alert;
public function init():void{
var netConnection:NetConnection = new NetConnection();
netConnection.connect("http://localhost:8080/");
var responder:Responder = new Responder(onComplete, onFail);
netConnection.call("myservice.echo", responder, "Flash talked to PyAMF. They both say hello.");
}
function onComplete(results):void {
//var my:String = String("我就是中文");
//var aTemp:Array = results as Array;
//Alert.show(aTemp.toString());
trace(results.toString());
//trace(sTemp);
/*for each(var thisResult in results){
trace(thisResult.toString());
}*/
}
function onFail(results):void {
for each (var thisResult in results){
trace( thisResult);
}
}
]]>
</mx:Script>
</mx:Application>
实验步骤:
1.打开CMD,用dev_appserver开启GAE服务器
2.在Flex中运行debug命令
实验问题:
['Traceback (most recent call last):', ' File "c:\\gaedemos\\cake\\pyamf\\remoting\\amf0.py", line 106, in __call__ *args, **kwargs)',
' File "c:\\gaedemos\\cake\\pyamf\\remoting\\amf0.py", line 59, in _getBody **kwargs)', '
File "c:\\gaedemos\\cake\\pyamf\\remoting\\gateway\\__init__.py", line 494, in callServiceRequest return service_request(*args)',
' File "c:\\gaedemos\\cake\\pyamf\\remoting\\gateway\\__init__.py", line 224, in __call__ return self.service(self.method, args)',
' File "c:\\gaedemos\\cake\\pyamf\\remoting\\gateway\\__init__.py", line 125, in __call__ return func(*params)', '
File "c:\\gaedemos\\cake\\main.py", line 18, in echo w.login(url)',
' File "c:\\gaedemos\\cake\\webspy\\webspy.py", line 42, in login myHome = urllib2.urlopen(request)',
' File "C:\\Python25\\lib\\urllib2.py", line 124, in urlopen return _opener.open(url, data)', '
File "C:\\Python25\\lib\\urllib2.py", line 381, in open response = self._open(req, data)', '
File "C:\\Python25\\lib\\urllib2.py", line 399, in _open \'_open\', req)', ' File "C:\\Python25\\lib\\urllib2.py", line 360, in _call_chain result = func(*args)', '
File "C:\\Python25\\lib\\urllib2.py", line 1107, in http_open return self.do_open(httplib.HTTPConnection, req)',
' File "C:\\Python25\\lib\\urllib2.py", line 1080, in do_open r = h.getresponse()', '
File "C:\\Program Files\\Google\\google_appengine\\google\\appengine\\dist\\httplib.py", line 200, in getresponse self._allow_truncated, self._follow_redirects)', '
File "C:\\Program Files\\Google\\google_appengine\\google\\appengine\\api\\urlfetch.py", line 241, in fetch return rpc.get_result(allow_truncated)'
, ' File "C:\\Program Files\\Google\\google_appengine\\google\\appengine\\api\\urlfetch.py", line 388, in get_result self.check_success(allow_truncated)',
' File "C:\\Program Files\\Google\\google_appengine\\google\\appengine\\api\\urlfetch.py", line 356, in check_success raise DownloadError(str(e))'
, "DownloadError: ApplicationError: 2 nonnumeric port: ''"]
DownloadError
ApplicationError: 2 nonnumeric port: ''
问题初步分析:
最后给出的结果是非数字端口,于是我想是不是没写端口号啊。加上:80后依旧。python代码在Eclipse+pydev的环境下跑的好好的,怎么到了gae就不行了呢?在网上查了好久,看到如下链接:
http://groups.google.co.jp/group/google-appengine/browse_thread/thread/07f418a36888c937
其中提到
This is a known incompatibility in App Engine. The GData APIs send an
absolute URL to the httplib library where it expects a relative one
(since the host and port was specified in the constructor); the Python
httplib handles this properly, but the App Engine replacement
currently does not.
奇怪的是python和GAE不是都用的一样的内核吗?我把python25的httplib文件复制过来以后还是这个问题。
实验小结:
问题期待继续调查。
发现一个解决的方法参见
http://nodex.iteye.com/blog/360733
参考了CPYUG组织,发现这是GAE的一个限制socket的行为,所以不管怎么改都没有用。可以用urlfetch代替,不过还困惑于cookie的处理。
可以参考:
https://groups.google.com/group/python-cn/browse_thread/thread/4b94c4ae8eb8d41c/54f2628668af75a0?lnk=gst&q=urlfetch#54f2628668af75a0
以后要多关注关注CPyUG了,真的好强啊。
分享到:
相关推荐
FreeMarker是专为实际的一代的 HTML 网页,特别是通过的servlet为基础的应用程序... 但是请注意,我们提供了型的解决方案中使用FreeMarker作为视图组成部分模型2框架(如Struts的) ,这也让你使用JSP的taglibs的模板。
2. **使用Java Agent**:对于一些难以替换的库,可以尝试使用Java Agent工具(如ProGuard)来剥离或混淆不被GAE支持的类。这样,即使原始代码中包含`TreeNode`,GAE也无法识别出来,从而避免错误。 3. **本地开发...
接下来,你需要使用GAE SDK中的`appcfg.py`工具将程序上传到GAE。在命令行中,导航到解压后的GD-cms目录,然后运行以下命令: ``` python appengine_sdk/google_appengine/appcfg.py upload . ``` 根据提示完成...
【标题】"IOS应用源码——nevyn-overload-0.3-0-gae3b7f5.zip" 提供的是一份iOS应用的源代码,版本号为0.3,标识符为gae3b7f5。这个压缩包很可能包含了一个完整的iOS项目,开发者可能在其中实现了特定的功能或者用于...
开发者通常会使用这些框架来简化游戏逻辑,处理图形渲染、动画、碰撞检测等问题。 4. **版本控制**:Git是一种分布式版本控制系统,gae3b7f5是Git提交的唯一标识符,通过它可以追踪源代码的历史变更,这对于多人...
2. **Google App Engine (GAE)**:GAE是Google提供的一项平台即服务(PaaS),允许开发者使用Python、Java、Go或Node.js编写Web应用程序,并在Google的基础设施上运行。GAE提供了自动扩展、负载均衡和数据存储等功能...
camel-freemarker-1.6.4.jar, camel-freemarker-2.8.1.jar, ...freemarker-1.4.1.jar, freemarker-2-3-18.jar, ...freemarker-gae-pre2.jar, freemarker-gae-pre3.jar, freemarker.jar, freemarker2_03.jar
资源分类:Python库 所属语言:Python 资源全名:gae_installer-1.9.17.4.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
`gae_command`库的具体功能和使用方法需要查看其文档或源代码才能详细了解。通常,Python库会有一个`README`文件或`docs`目录,其中包含关于如何使用库的信息,包括示例代码、API参考等。对于开发人员来说,理解这些...
资源分类:Python库 所属语言:Python 资源全名:gae_installer-1.9.7.2.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
通过这个入门教程,你将学会如何使用 GAE 构建一个完整的 web 应用,包括基础的页面显示、用户认证、数据存储、表单处理和应用发布。这个教程覆盖了 GAE 开发的关键概念和技术,是学习 GAE 开发的良好起点。
GAE 入门教程介绍了如何开始使用 Google App Engine 进行 web 应用开发。教程中提到,通过 GAE,开发者可以快速创建网站应用,直接上传并分享,无需复杂的配置。教程通过创建一个简单的留言本应用来展示 GAE 的主要...
GAE使用规则GAE使用规则GAE使用规则GAE使用规则GAE使用规则GAE使用规则GAE使用规则GAE使用规则GAE使用规则
2. 如果使用Eclipse,安装Google插件并使用其创建GAE项目。 3. 获取并安装App Engine Java SDK,如果不在Eclipse中进行,可以下载ZIP文件。 4. 配置并创建你的第一个GAE应用,例如留言簿应用。 通过以上步骤,你将...
word转PDF 工具jar包;word模板填充字段有点小脾气,字段 需要带前后空格,或者分号/回车符结尾;不然会替换不了(你将模板转为xml文件,打开就知道原因了,可能将你的字段拆开或者加%空格之类的,需要自己main方法...
关于gae的例子,适合初学者对深度强化学习gae的认识和了解
这两个版本号分别表示它们的发布版本,2.0.2和2.0.1,通常更新版本会修复已知问题并引入新的功能。 在Java开发中,Apache POI库是非常关键的工具,特别是在需要与Microsoft Office文档进行交互的场景下。XWPF是...
maven-gae-plugin-0.9.6.jar
maven-gae-plugin-0.9.5.jar