【问题标题】:IllegalStateException with Google App Engine Local DatastoreGoogle App Engine 本地数据存储区出现 IllegalStateException
【发布时间】:2017-12-23 11:43:42
【问题描述】:

所以我尝试在本地运行带有Datastore 的Google App 引擎来进行测试和调试。本地的App 引擎似乎可以独立工作,datastore 模拟器也是如此。

但是一旦我为datastore模拟器设置了环境变量,并重新启动本地App Engine,它就会崩溃并出现错误,

Caused by: java.lang.IllegalStateException: Must use project ID as app ID if project ID is provided. 

我在下面附上了更完整的堆栈跟踪

从错误消息中,我怀疑我需要将我的项目 ID 更改为项目名称。因此,我尝试用项目名称替换项目 ID 的各种实例,但不幸的是,这也不起作用。

我正在运行的命令:

1. gcloud config set project PROJECT-ID
2. export ENDPOINTS_SERVICE_NAME=name.endpoints.PROJECT-ID.cloud.goog
3. gcloud beta emulators datastore start
4. $(gcloud beta emulators datastore env-init)
5. mvn appengine:run

我已将堆栈跟踪放在 pastebin https://pastebin.com/atcnYwrq

【问题讨论】:

    标签: java google-app-engine runtime-error illegalstateexception


    【解决方案1】:

    我碰巧找到了解决这个问题的方法。

    export DATASTORE_USE_PROJECT_ID_AS_APP_ID=true
    

    【讨论】:

    • 为我工作,但它有什么作用?
    【解决方案2】:

    如果其他人偶然发现此错误,我还没有修复原始错误,但如果您改用 Remote API,它似乎会在 RemoteCheck 为 false 时设置本地数据存储。

    如果您使用 Objectify,则需要使用 Remotely,设置 CustomFactory 并注册它,并确保您的 web.xml 中有类似以下内容

    <filter-mapping>
        <filter-name>ObjectifyFilter</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>INCLUDE</dispatcher>
        <dispatcher>FORWARD</dispatcher>
    </filter-mapping>
    <listener>
        <listener-class>com.packagename.OfyHelper</listener-class>
    </listener>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-18
      • 2011-02-16
      • 2013-12-03
      • 1970-01-01
      • 1970-01-01
      • 2010-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多