【问题标题】:Custom datastore location on local machine with App Engine使用 App Engine 在本地计算机上自定义数据存储位置
【发布时间】:2014-10-09 23:01:19
【问题描述】:

我正在 Android Studio 中开发 App Engine 应用程序并在我的本地机器上测试它(使用本地数据存储)。它是基于 Java 的应用程序。每次我重新运行服务器时,都会清除本地数据存储。我为Python 开发人员找到了几种解决方案,但似乎没有针对 Java 的解决方案。

Android Studio 只允许更改:

  • WAR 路径
  • 虚拟机参数
  • 服务器地址
  • 服务器端口

我已经尝试过使用 VM args,但显然这些是针对 Java VM 而不是针对应用服务器的。有没有办法在服务器重新启动时保留本地数据存储?如果我能直接从 Android Studio 运行这个配置就完美了。

【问题讨论】:

    标签: java android google-app-engine


    【解决方案1】:

    本地数据存储被清除,因为默认情况下它位于应用程序爆炸的战争目录中(在每次构建时都会被完全删除)。

    您不必从终端手动运行开发服务器,实际上只需将 VM arg 添加到 appengine 运行配置中即可将数据存储区定位到另一个位置:

    -Ddatastore.backing_store="/path/to/datastore/file/location/local_db.bin"
    

    (解决方案见:https://code.google.com/p/android/issues/detail?id=68225

    【讨论】:

    【解决方案2】:

    就像 Arjan 所说,您可以使用 -Ddatastore.backing_store

    如果您使用Android Studio 1.5,请修改build.gradle。在appengine 上放置参数jvmFlags。示例:

     appengine {
      downloadSdk = true
      appcfg {
        oauth2 = true
      }
      jvmFlags = ["-Ddatastore.backing_store=\"D:/temp/local_db.bin\""]
    }
    

    【讨论】:

    • 对我来说效果很好(在重新启动 AndroidStudio 之后,指出这一点可能很有意义)。
    【解决方案3】:

    经过几个小时的搜索,我终于找到了如何使用用户定义的文件作为本地存储。不幸的是,它不能直接从 Android Studio 运行,服务器必须从终端运行。

    以下是 Java 的 dev-appserver 的参数:

    Usage: <dev-appserver> [options] <app directory>
    Options:
     --help, -h                 Show this help message and exit.
     --sdk_root=DIR             Overrides where the SDK is located.
     --server=SERVER            The server to use to determine the latest
      -s SERVER                   SDK version.
     --address=ADDRESS          The address of the interface on the local machine
      -a ADDRESS                  to bind to (or 0.0.0.0 for all interfaces).
     --port=PORT                The port number to bind to on the local machine.
      -p PORT
     --disable_update_check     Disable the check for newer SDK versions.
     --generated_dir=DIR        Set the directory where generated files are created.
     --default_gcs_bucket=NAME  Set the default Google Cloud Storage bucket name.
     --jvm_flag=FLAG            Pass FLAG as a JVM argument. May be repeated to
                                  supply multiple flags.
    

    您必须更改 generated_dir 参数。要直接从终端运行开发服务器,有一个非常好的命令:

    /usr/lib/jvm/default-java/bin/java -javaagent:$HOME/.gradle/appengine-sdk/appengine-java-sdk-1.9.9/lib/agent/appengine-agent.jar -Xbootclasspath/p:$HOME/.gradle/appengine-sdk/appengine-java-sdk-1.9.9/lib/override/appengine-dev-jdk-overrides.jar -Didea.launcher.port=7533 -Didea.launcher.bin.path=/opt/android-studio/bin -Dfile.encoding=UTF-8 -classpath $HOME/.gradle/appengine-sdk/appengine-java-sdk -1.9.9/lib/appengine-tools-api.jar:/opt/android-studio/lib/idea_rt.jar com.intellij.rt.execution.application.AppMain com.google.appengine.tools.development.DevAppServerMain --address=0.0.0.0 --port=8080 --generated_dir=$HOME/sandbox/$HOME/app/backend/build/exploded-app

    我已将 generated_dir 参数更改为 --generated_dir=$HOME/sandbox/

    请注意,您必须提供 Android Studio 路径和 App Engine SDK 版本。对于我的工作站,相应地是 /opt/android-studioappengine-java-sdk-1.9.9

    【讨论】:

    • 我正在使用 java appengine sdk 1.9.12 并且该参数不再存在 :( ..... 你现在是怎么做到的?
    • 我检查了 1.9.14 版本,它工作正常。你确定这些参数在 1.9.12 中不存在吗?
    • 非常感谢您的回复!我仔细检查了我所做的事情,我意识到如果我把 --generated_dir 放在最后它不会工作!!!!谢谢!我会在其他问题上粘贴这篇文章的链接!
    • 有没有办法以某种方式将此标志添加到 gradle 中?
    猜你喜欢
    • 2019-09-27
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-09
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    相关资源
    最近更新 更多