这篇文章主要围绕如何配置GoogleAppEngine以使用矢量图形?和谷歌矢量图展开,旨在为您提供一份详细的参考资料。我们将全面介绍如何配置GoogleAppEngine以使用矢量图形?的优缺点,解
这篇文章主要围绕如何配置Google AppEngine以使用矢量图形?和谷歌矢量图展开,旨在为您提供一份详细的参考资料。我们将全面介绍如何配置Google AppEngine以使用矢量图形?的优缺点,解答谷歌矢量图的相关问题,同时也会为您带来Google App Engine 和 Google Compute Engine 有什么区别?、Google App Engine:ImportError:没有名为appengine.ext的模块、Google AppEngine 使用 Jetty 作为 Java 应用引擎、Google AppEngine会话示例的实用方法。
本文目录一览:- 如何配置Google AppEngine以使用矢量图形?(谷歌矢量图)
- Google App Engine 和 Google Compute Engine 有什么区别?
- Google App Engine:ImportError:没有名为appengine.ext的模块
- Google AppEngine 使用 Jetty 作为 Java 应用引擎
- Google AppEngine会话示例
如何配置Google AppEngine以使用矢量图形?(谷歌矢量图)
在尝试使用SVG的Java8 AppEngine标准环境中,出现下一个错误。当我尝试在POSL之类的XSLFSlide上绘制SVGslide.draw(graphics2D)
或使用Batik将SVG转换为PNG时,出现此错误。由于fontconfig找不到字体,因此似乎出现了问题。在debian发行版中,它通过安装解决libfontconfig1
。如何在AppEngine上解决?
java.lang.NullPointerExceptionat sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1264)at sun.awt.FontConfiguration.readFontConfigFile(FontConfiguration.java:219)at sun.awt.FontConfiguration.init(FontConfiguration.java:107)at sun.awt.X11FontManager.createFontConfiguration(X11FontManager.java:774)at sun.font.SunFontManager$2.run(SunFontManager.java:431)at java.security.AccessController.doPrivileged(Native Method)at sun.font.SunFontManager.<init>(SunFontManager.java:376)at sun.awt.FcFontManager.<init>(FcFontManager.java:35)at sun.awt.X11FontManager.<init>(X11FontManager.java:57)at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)at java.lang.reflect.Constructor.newInstance(Constructor.java:423)at java.lang.Class.newInstance(Class.java:443)at sun.font.FontManagerFactory$1.run(FontManagerFactory.java:83)at java.security.AccessController.doPrivileged(Native Method)at sun.font.FontManagerFactory.getInstance(FontManagerFactory.java:74)at java.awt.Font.getFont2D(Font.java:491)at java.awt.Font.canDisplay(Font.java:1980)at org.apache.poi.sl.draw.DrawTextParagraph.canDisplayUpTo(DrawTextParagraph.java:756)at org.apache.poi.sl.draw.DrawTextParagraph.getAttributedString(DrawTextParagraph.java:640)at org.apache.poi.sl.draw.DrawTextParagraph.breakText(DrawTextParagraph.java:248)at org.apache.poi.sl.draw.DrawTextShape.drawParagraphs(DrawTextShape.java:159)at org.apache.poi.sl.draw.DrawTextShape.getTextHeight(DrawTextShape.java:220)at org.apache.poi.sl.draw.DrawTextShape.drawContent(DrawTextShape.java:102)at org.apache.poi.sl.draw.DrawSimpleShape.draw(DrawSimpleShape.java:93)at org.apache.poi.sl.draw.DrawSheet.draw(DrawSheet.java:71)at org.apache.poi.sl.draw.DrawSlide.draw(DrawSlide.java:41)at org.apache.poi.xslf.usermodel.XSLFSlide.draw(XSLFSlide.java:307)
答案1
小编典典我遇到了同样的问题,并通过设置"sun.awt.fontconfig"
system属性,明确告诉AppEngine
VM要提取的特定字体配置,从而设法解决了该问题。尝试在源代码的最开始处插入以下代码(在使用任何字体或图形组件之前):
String fontConfig = System.getProperty("java.home") + File.separator + "lib" + File.separator + "fontconfig.Prodimage.properties"; if (new File(fontConfig).exists()) System.setProperty("sun.awt.fontconfig", fontConfig);
Google App Engine 和 Google Compute Engine 有什么区别?
我想知道 App Engine 和 Compute Engine 之间的区别是什么。任何人都可以向我解释其中的区别吗?
答案1
小编典典App Engine 是一种平台即服务。这意味着您只需部署代码,平台会为您完成所有其他工作。例如,如果您的应用非常成功,App Engine
将自动创建更多实例来处理增加的数量。
阅读有关 App Engine
的更多信息
Compute Engine 是一种基础架构即服务。您必须创建和配置自己的虚拟机实例。它为您提供了更大的灵活性,并且通常比 App Engine
成本低得多。缺点是您必须自己管理应用程序和虚拟机。
详细了解 Compute Engine
如有必要,您可以混合使用 App Engine 和 Compute Engine。它们都可以很好地与Google Cloud
Platform的其他部分配合使用。
编辑(2016 年 5 月):
另一个重要的区别:如果没有请求进入,在 App Engine
上运行的项目可以缩减到零实例。这在开发阶段非常有用,因为您可以持续数周而不会超过实例小时的慷慨免费配额。灵活的运行时(即“托管虚拟机”)需要至少一个实例来持续运行。
编辑(2017 年 4 月):
Cloud Functions (目前处于测试阶段)在抽象方面比 App Engine 更上一层楼 -
没有实例!它允许开发人员部署一小段代码来执行以响应不同的事件,其中可能包括 HTTP 请求、云存储中的更改等。
与 App Engine 的最大区别在于函数按每 100 毫秒计费,而 App Engine 的实例仅在 15 分钟不活动后才会关闭。另一个优点是
Cloud Functions 立即执行,而对 App Engine 的调用可能需要一个新实例 -
并且冷启动一个新实例可能需要几秒钟或更长时间(取决于运行时和您的代码)。
这使得 Cloud Functions 非常适合 (a) 罕见调用 - 无需让实例保持活动状态以防万一发生某些事情,(b)
快速变化的负载,其中实例经常旋转和关闭,可能还有更多用例。
阅读有关云函数的更多信息
Google App Engine:ImportError:没有名为appengine.ext的模块
我正在尝试为使用数据存储区的GAE程序编写测试。遵循Google的Documentation,我看到我应该将我的SDK的路径添加到我的PYTHONPATH中。我这样做是使用:
import syssys.path.remove(''/usr/local/lib/python2.7/dist-packages'') # Has a ''google'' module, which I want to be sure isn''t interfering.sys.path.insert(1,''/home/olly/google-cloud-sdk/platform/google_appengine'')sys.path.insert(1, ''/home/olly/google-cloud-sdk/platform/google_appengine/lib/yaml/lib'')
然后在运行文件时:
Traceback (most recent call last): File "myapp_tests.py", line 20, in <module> from google.appengine.ext import ndbImportError: No module named appengine.ext
我已经在上面的位置安装了SDK,并查看了其中包含/home/olly/google-cloud-sdk/platform/google_appengine/
的google
文件夹__init__.py
以及appengine
。基本上,文件夹结构对我来说看起来不错,它们都被正确命名并包含__init__.py
文件。
在交互式控制台中,运行上述命令后,我发现可以运行:
import google
没问题,但是当我尝试
import google.appengineTraceback (most recent call last): File "<stdin>", line 1, in <module>ImportError: No module named appengine
据我了解,将__init__.py()
文件包含在目录中意味着可以如上所述导入它们。我也做了一个sudo find / --name"google"
,并且显示在我的PYTHONPATH中的唯一的东西是/usr/local/lib/python2.7/dist-packages
,我明确删除了它,并且无论如何也将其余的路径插入了前面。
我尝试使用GAE自己的方法:
import dev_appserverdev_appserver.fix_sys_path()
这为sys.path添加了很多路径,但仍然没有帮助我使其工作。
我还发现,当我添加''/home/olly/Servers/google_appengine/google''
到路径时,可以运行:
import appengine.ext
但正在运行:
from appengine.ext import ndb
原因:
Traceback (most recent call last): File "booking_function_tests.py", line 16, in <module> from appengine.ext import ndb File "/home/olly/Servers/google_appengine/google/appengine/ext/ndb/__init__.py", line 7, in <module> from tasklets import * File "/home/olly/Servers/google_appengine/google/appengine/ext/ndb/tasklets.py", line 69, in <module> from .google_imports import apiproxy_stub_map File "/home/olly/Servers/google_appengine/google/appengine/ext/ndb/google_imports.py" , line 11, in <module> from google3.storage.onestore.v3 import entity_pbImportError: No module named google3.storage.onestore.v3
我是否真的缺少明显的东西?我应该如何导入ndb?
编辑:我正在运行最新的SDK(1.9.34),但是我的google_imports.py中包含以下代码:
try: from google.appengine.datastore import entity_pb normal_environment = Trueexcept ImportError: try: from google3.storage.onestore.v3 import entity_pb normal_environment = False except ImportError: # If we are running locally but outside the context of App Engine. try: set_appengine_imports() from google.appengine.datastore import entity_pb normal_environment = True except ImportError: raise ImportError(''Unable to find the App Engine SDK. '' ''Did you remember to set the "GAE" environment '' ''variable to be the path to the App Engine SDK?'')
另外,还google.__path__
提供了''/usr/local/lib/python2.7/dist-packages''
我认为我之前删除的路径。这是我如何删除它的摘录:
import syssys.path.insert(1, ''/home/olly/Servers/google_appengine'')sys.path.insert(1, ''/home/olly/Servers/google_appengine/lib/yaml/lib'')sys.path.remove(''/usr/local/lib/python2.7/dist-packages'')import googleprint google.__path__print sys.path[''/usr/local/lib/python2.7/dist-packages/google''][''/home/olly/Servers/google_appengine/myapp'', ''/home/olly/Servers/google_appengine/lib/yaml/lib'', ''/home/olly/Servers/google_appengine/google'', ''/home/olly/Servers/google_appengine'', ''/usr/lib/python2.7'', ''/usr/lib/python2.7/plat-x86_64-linux-gnu'', ''/usr/lib/python2.7/lib-tk'', ''/usr/lib/python2.7/lib-old'', ''/usr/lib/python2.7/lib-dynload'', ''/usr/lib/python2.7/dist-packages'', ''/usr/lib/python2.7/dist-packages/PILcompat'', ''/usr/lib/python2.7/dist-packages/gtk-2.0'', ''/usr/lib/pymodules/python2.7'', ''/usr/lib/python2.7/dist-packages/ubuntu-sso-client'', ''/usr/lib/python2.7/dist-packages/wx-2.8-gtk2-unicode'']
因此,我的sys.path已更新,但importgoogle
似乎仍从不再存在的路径中导入,这可能是我猜到的问题的症结所在。我是否需要重新加载路径或其他内容?
答案1
小编典典通过始终在virtualenv内部运行,我所遇到的这些问题要少得多
。
我同意snakecharmerrb的观点,您应该得到打印google.__file__
或google.__path_
准确了解要导入的内容。
该代码段也可以解决您的问题:
import googlegae_dir = google.__path__.append(''/path/to/appengine_sdk//google_appengine/google'')sys.path.insert(0, gae_dir) # might not be necessaryimport google.appengine # now it''s on your import path`
Google AppEngine 使用 Jetty 作为 Java 应用引擎
Google 的新版 App Engine 采用的 Jetty 来作为 Java 应用的引擎。尽管很难发现是在用 Jetty ,但在下载的 SDK 中可以看到 Jetty 的类,同时在异常的堆栈中同样可以看到 Jetty 的相关异常信息。
不仅如此,堆栈跟踪和其他文件显示,谷歌确实在若干个层次中利用 Jetty 的嵌入功能和可扩展功能,这些包括:
- 利用 Jetty 的 RPC 连接器来接收前端的请求;
- 他们利用谷歌帐户认证作为唯一支持的验证机制;
- 使用数据库或者是memcached来做session的集群;
- 使用一个名为 appengine-web.xml 配置文件;
- Jetty 被嵌入到 SDK 和 Eclipse 的发布插件中。
原文出自: http://blogs.webtide.com/gregw/entry/google_appengine_uses_jetty
Google AppEngine会话示例
我刚刚在Google AppEngine / Java +
GWT应用程序中启用了Session。以及如何使用它?我如何获得会话ID并从中播放所有好东西?是否有任何简单的登录页面的真实示例,我只是输入LoginName和Password,然后通过RPC调用转到服务器,针对数据库进行身份验证并将Session
ID发送回客户端。
我已经有以下代码,但不知道下一步该怎么做:
GWT登录表单:
public class LoginForm { private final LoginServiceAsync loginService = GWT.create(LoginService.class); VerticalPanel loginVp = new VerticalPanel(); TextBox loginTxt = new TextBox(); TextBox passTxt = new TextBox(); Button loginBtn = new Button("Login"); public Widget getLoginWidget(){ loginBtn.addClickHandler(new ClickHandler(){ public void onClick(ClickEvent arg0) { loginService.authenticateUser(loginTxt.getText(), passTxt.getText(), new AsyncCallback<String>(){ public void onFailure(Throwable caught) { InfoPanel.show(InfoPanelType.HUMANIZED_MESSAGE, "No Connetion", "Problem conneting to the server."); } public void onSuccess(String result) { InfoPanel.show(InfoPanelType.HUMANIZED_MESSAGE, "Session ID", "Your session id is: " + result); GWT.log("Setting up session", null); String sessionID = result; final long DURATION = 1000 * 60 * 60 * 24 * 14; //duration remembering login. 2 weeks Date expires = new Date(System.currentTimeMillis() + DURATION); Cookies.setCookie("sid", sessionID, expires, null, "/", false); } } ); } }); loginVp.add(loginTxt); loginVp.add(passTxt); loginVp.add(loginBtn); return loginVp; }}
RPC Servlet:
public class LoginServiceImpl extends RemoteServiceServlet implements LoginService{ //Sends back to the client session id public String authenticateUser(String login, String password){ String sessionId = new String(); // TODO: figure out how to work with session id in GAE/J sessionId = "How to get session id?"; return sessionId; } public Boolean checkIfSessionIsValid(String sessionId){ //TODO: figure out how to check user''s credentials return true; }}
正确方向的任何提示都将有所帮助。谢谢。
答案1
小编典典您可以通过以下方法在GAE中获取会话:
this.getThreadLocalRequest().getSession();
关于如何配置Google AppEngine以使用矢量图形?和谷歌矢量图的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于Google App Engine 和 Google Compute Engine 有什么区别?、Google App Engine:ImportError:没有名为appengine.ext的模块、Google AppEngine 使用 Jetty 作为 Java 应用引擎、Google AppEngine会话示例的相关信息,请在本站寻找。
本文标签: