我们无法使用 Google App Engine 启动 AppRTC 应用程序

We cant start the AppRTC application using Google App Engine

问题

我正在尝试在我的虚拟机 (ubuntu 16.04) 上构建和部署 apprtc 应用程序。我已经成功部署了对撞机服务器。但是当我尝试使用 google 应用程序引擎启动 apprtc 应用程序时出现错误。

遵循的步骤

  1. https://github.com/webrtc/apprtc
  2. 克隆源代码
  3. 根据文档启动对撞机服务器(监听8080端口)
  4. 进入 apprtc 目录并使用命令 npm install 安装节点包。
  5. 使用命令 "grunt build".
  6. 成功构建 apprtc 应用程序
  7. https://cloud.google.com/appengine/docs/standard/java/download
  8. 安装 google 应用引擎 (appengine-java-sdk-1.9.62)
  9. 运行 apprtc 应用程序使用以下命令:

    DIRECTORY_PATH/appengine-java-sdk-1.9.62/bin/dev_appserver.sh out/app_engine/.
    

出现这样的错误

Executing [/usr/lib/jvm/java-8-oracle/jre/bin/java, -javaagent:/home/jishnu/manaf/appengine-java-sdk-1.9.62/lib/agent/appengine-agent.jar, -classpath, /home/jishnu/manaf/appengine-java-sdk-1.9.62/lib/appengine-tools-api.jar, com.google.appengine.tools.development.DevAppServerMain, --property=kickstart.user.dir=/home/jishnu/manaf/apprtc, /home/jishnu/manaf/apprtc/out/app_engine/.]
Feb 08, 2018 5:00:03 PM java.util.prefs.FileSystemPreferences run
INFO: Created user preferences directory.
Feb 08, 2018 5:00:06 PM com.google.apphosting.utils.config.AppEngineWebXmlReader readAppEngineWebXml
SEVERE: Received exception processing /home/jishnu/manaf/apprtc/out/app_engine/WEB-INF/appengine-web.xml
com.google.apphosting.utils.config.AppEngineConfigException: Could not locate /home/jishnu/manaf/apprtc/out/app_engine/WEB-INF/appengine-web.xml
    at com.google.apphosting.utils.config.AppEngineWebXmlReader.getInputStream(AppEngineWebXmlReader.java:141)
    at com.google.apphosting.utils.config.AppEngineWebXmlReader.readAppEngineWebXml(AppEngineWebXmlReader.java:75)
    at com.google.apphosting.utils.config.EarHelper.readWebModule(EarHelper.java:178)
    at com.google.appengine.tools.development.ApplicationConfigurationManager$WarModuleConfigurationHandle.readConfiguration(ApplicationConfigurationManager.java:417)
    at com.google.appengine.tools.development.ApplicationConfigurationManager.<init>(ApplicationConfigurationManager.java:158)
    at com.google.appengine.tools.development.ApplicationConfigurationManager.newWarConfigurationManager(ApplicationConfigurationManager.java:100)
    at com.google.appengine.tools.development.ApplicationConfigurationManager.newWarConfigurationManager(ApplicationConfigurationManager.java:86)
    at com.google.appengine.tools.development.DevAppServerImpl.<init>(DevAppServerImpl.java:142)
    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 com.google.appengine.tools.development.DevAppServerFactory.doCreateDevAppServer(DevAppServerFactory.java:338)
    at com.google.appengine.tools.development.DevAppServerFactory.access[=12=]0(DevAppServerFactory.java:31)
    at com.google.appengine.tools.development.DevAppServerFactory.run(DevAppServerFactory.java:285)
    at com.google.appengine.tools.development.DevAppServerFactory.run(DevAppServerFactory.java:282)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.google.appengine.tools.development.DevAppServerFactory.createDevAppServer(DevAppServerFactory.java:281)
    at com.google.appengine.tools.development.DevAppServerMain$StartAction.apply(DevAppServerMain.java:348)
    at com.google.appengine.tools.util.Parser$ParseResult.applyArgs(Parser.java:45)
    at com.google.appengine.tools.development.DevAppServerMain.run(DevAppServerMain.java:223)
    at com.google.appengine.tools.development.DevAppServerMain.main(DevAppServerMain.java:214)
Caused by: java.io.FileNotFoundException: /home/jishnu/manaf/apprtc/out/app_engine/WEB-INF/appengine-web.xml (No such file or directory)
    at java.io.FileInputStream.open0(Native Method)
    at java.io.FileInputStream.open(FileInputStream.java:195)
    at java.io.FileInputStream.<init>(FileInputStream.java:138)
    at java.io.FileInputStream.<init>(FileInputStream.java:93)
    at com.google.apphosting.utils.config.AppEngineWebXmlReader.getInputStream(AppEngineWebXmlReader.java:137)
    ... 21 more

com.google.apphosting.utils.config.AppEngineConfigException: Invalid configuration
    at com.google.appengine.tools.development.DevAppServerImpl.reportDeferredConfigurationException(DevAppServerImpl.java:435)
    at com.google.appengine.tools.development.DevAppServerImpl.doStart(DevAppServerImpl.java:232)
    at com.google.appengine.tools.development.DevAppServerImpl.access[=12=]0(DevAppServerImpl.java:47)
    at com.google.appengine.tools.development.DevAppServerImpl.run(DevAppServerImpl.java:219)
    at com.google.appengine.tools.development.DevAppServerImpl.run(DevAppServerImpl.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.google.appengine.tools.development.DevAppServerImpl.start(DevAppServerImpl.java:217)
    at com.google.appengine.tools.development.DevAppServerMain$StartAction.apply(DevAppServerMain.java:368)
    at com.google.appengine.tools.util.Parser$ParseResult.applyArgs(Parser.java:45)
    at com.google.appengine.tools.development.DevAppServerMain.run(DevAppServerMain.java:223)
    at com.google.appengine.tools.development.DevAppServerMain.main(DevAppServerMain.java:214)
Caused by: com.google.apphosting.utils.config.AppEngineConfigException: Invalid appengine-web.xml(/home/jishnu/manaf/apprtc/out/app_engine/WEB-INF/appengine-web.xml) - Could not locate /home/jishnu/manaf/apprtc/out/app_engine/WEB-INF/appengine-web.xml
    at com.google.apphosting.utils.config.EarHelper.readWebModule(EarHelper.java:180)
    at com.google.appengine.tools.development.ApplicationConfigurationManager$WarModuleConfigurationHandle.readConfiguration(ApplicationConfigurationManager.java:417)
    at com.google.appengine.tools.development.ApplicationConfigurationManager.<init>(ApplicationConfigurationManager.java:158)
    at com.google.appengine.tools.development.ApplicationConfigurationManager.newWarConfigurationManager(ApplicationConfigurationManager.java:100)
    at com.google.appengine.tools.development.ApplicationConfigurationManager.newWarConfigurationManager(ApplicationConfigurationManager.java:86)
    at com.google.appengine.tools.development.DevAppServerImpl.<init>(DevAppServerImpl.java:142)
    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 com.google.appengine.tools.development.DevAppServerFactory.doCreateDevAppServer(DevAppServerFactory.java:338)
    at com.google.appengine.tools.development.DevAppServerFactory.access[=12=]0(DevAppServerFactory.java:31)
    at com.google.appengine.tools.development.DevAppServerFactory.run(DevAppServerFactory.java:285)
    at com.google.appengine.tools.development.DevAppServerFactory.run(DevAppServerFactory.java:282)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.google.appengine.tools.development.DevAppServerFactory.createDevAppServer(DevAppServerFactory.java:281)
    at com.google.appengine.tools.development.DevAppServerMain$StartAction.apply(DevAppServerMain.java:348)
    ... 3 more

预期结果

根据文档,在这一步之后,我们应该使用 http://localhost:443 url.

成功访问 apprtc 应用程序

我遵循的步骤的实际问题是什么?

com.google.apphosting.utils.config.AppEngineConfigException: Could not locate /home/jishnu/manaf/apprtc/out/app_engine/WEB-INF/appengine-web.xml

嗯,从 apprtc/src/app_engine/app.yaml 看来,该应用程序是 python 应用程序,而不是 java 应用程序。 python 应用程序没有 WEB-INF/appengine-web.xml

所以你需要:

  • 在您的 gcloud SDK 中安装 python 支持(如果您尚未安装)或使用 GAE python SDK(参见
  • 运行 python 开发服务器,具体取决于您使用的 SDK :

    <gcloud_sdk>/bin/dev_appserver.py out/app_engine/.
    

    <gae_python_sdk>/dev_appserver.py out/app_engine/.
    

这或多或少在您引用的源代码页的 apprtc README.md 中指定:

Running AppRTC locally requires Google App Engine SDK for Python,

...

Start the AppRTC dev server from the out/app_engine directory by running the Google App Engine SDK dev server,

<path to sdk>/dev_appserver.py ./out/app_engine