GVKun编程网logo

如何配置Google AppEngine以使用矢量图形?(谷歌矢量图)

16

这篇文章主要围绕如何配置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 AppEngine以使用矢量图形?(谷歌矢量图)

在尝试使用SVG的Java8 AppEngine标准环境中,出现下一个错误。当我尝试在POSL之类的XSLFSlide上绘制SVG
slide.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 有什么区别?

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的模块

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 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会话示例

我刚刚在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会话示例的相关信息,请在本站寻找。

本文标签: